libpqtypes
verkar ha visst stöd för hstore
.
Ett annat alternativ är att undvika direkt interaktion med hstore
i din kod. Du kan fortfarande dra nytta av det i databasen utan att ta itu med dess textrepresentation på klientsidan. Säg att du vill hämta ett hstorefält; du använder bara:
SELECT t.id, k, v FROM thetable t, LATERAL each(t.hstorefield);
eller på gamla PostgreSQL-versioner kan du använda det knäppa och icke-standardiserade set-returning-function-in-SELECT-formuläret:
SELECT t.id, each(t.hstorefield) FROM thetable t;
(men se upp om du väljer flera poster från t
på så sätt får du konstiga resultat medan LATERAL
kommer att gå bra).
Ett annat alternativ är att använda hstore_to_array
eller hstore_to_matrix
när du frågar, om du är bekväm med att hantera PostgreSQL-arrayrepresentation.
För att skapa hstore-värden kan du använda hstore-konstruktörerna som tar arrayer. Dessa arrayer kan i sin tur skapas med array_agg
över en VALUES
om du inte vill hantera PostgreSQL:s arrayrepresentation i din kod.
All denna röra borde försvinna i framtiden, eftersom PostgreSQL 9.4 sannolikt kommer att ha mycket bättre samverkan mellan hstore- och json-typerna, vilket gör att du bara kan använda json-representationen när du interagerar med hstore.