PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment accéder à une colonne HSTORE à l'aide de la bibliothèque PostgreSQL C (libpq) ?

libpqtypes semble avoir un certain support pour hstore .

Une autre option consiste à éviter d'interagir directement avec hstore dans votre code. Vous pouvez toujours en bénéficier dans la base de données sans vous occuper de sa représentation textuelle côté client. Supposons que vous souhaitiez récupérer un champ hstore ; vous utilisez simplement :

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

ou sur les anciennes versions de PostgreSQL, vous pouvez utiliser la forme originale et non standard set-returning-function-in-SELECT :

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

(mais faites attention si vous sélectionnez plusieurs enregistrements de t de cette façon, vous obtiendrez des résultats étranges alors que LATERAL ira bien).

Une autre option consiste à utiliser hstore_to_array ou hstore_to_matrix lors de l'interrogation, si vous êtes à l'aise avec la représentation de tableaux PostgreSQL.

Pour créer des valeurs hstore, vous pouvez utiliser les constructeurs hstore qui prennent des tableaux. Ces tableaux peuvent à leur tour être créés avec array_agg sur un VALUES clause si vous ne voulez pas gérer la représentation de tableau de PostgreSQL dans votre code.

Tout ce gâchis devrait disparaître à l'avenir, car PostgreSQL 9.4 aura probablement une bien meilleure interopérabilité entre les types hstore et json, vous permettant d'utiliser simplement la représentation json lors de l'interaction avec hstore.