PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come accedere a una colonna HSTORE utilizzando la libreria C PostgreSQL (libpq)?

libpqtypes sembra avere del supporto per hstore .

Un'altra opzione è evitare di interagire direttamente con hstore nel tuo codice Puoi comunque trarne vantaggio nel database senza occuparti della sua rappresentazione testuale sul lato client. Supponiamo di voler recuperare un campo hstore; usi solo:

SELECT t.id, k, v FROM thetable t, LATERAL each(t.hstorefield);

o sulle vecchie versioni di PostgreSQL puoi usare il modulo bizzarro e non standard set-returning-function-in-SELECT:

SELECT t.id, each(t.hstorefield) FROM thetable t;

(ma fai attenzione se selezioni più record da t in questo modo, otterrai risultati strani mentre LATERAL andrà bene).

Un'altra opzione è usare hstore_to_array o hstore_to_matrix durante la query, se ti senti a tuo agio con la rappresentazione di array PostgreSQL.

Per creare valori hstore puoi usare i costruttori hstore che accettano gli array. Tali array possono a loro volta essere creati con array_agg su un VALUES clausola se non vuoi occuparti della rappresentazione dell'array di PostgreSQL nel tuo codice.

Tutto questo pasticcio dovrebbe scomparire in futuro, poiché PostgreSQL 9.4 probabilmente avrà un'interoperabilità molto migliore tra i tipi hstore e json, consentendoti di utilizzare semplicemente la rappresentazione json quando interagisci con hstore.