libpqtypes
wydaje się mieć pewne wsparcie dla hstore
.
Inną opcją jest uniknięcie bezpośredniej interakcji z hstore
w twoim kodzie. Nadal możesz z niego korzystać w bazie danych bez zajmowania się jego reprezentacją tekstową po stronie klienta. Powiedzmy, że chcesz pobrać pole hstore; po prostu używasz:
SELECT t.id, k, v FROM thetable t, LATERAL each(t.hstorefield);
lub w starych wersjach PostgreSQL możesz użyć dziwacznego i niestandardowego formularza set-returning-in-SELECT:
SELECT t.id, each(t.hstorefield) FROM thetable t;
(ale uważaj, jeśli wybierasz wiele rekordów z t
w ten sposób uzyskasz dziwne wyniki, podczas gdy LATERAL
będzie dobrze).
Inną opcją jest użycie hstore_to_array
lub hstore_to_matrix
podczas zapytań, jeśli nie masz problemu z reprezentacją tablic PostgreSQL.
Do tworzenia wartości hstore możesz użyć konstruktorów hstore, które przyjmują tablice. Te tablice można z kolei tworzyć za pomocą array_agg
ponad VALUES
jeśli nie chcesz zajmować się reprezentacją tablicową PostgreSQL w swoim kodzie.
Cały ten bałagan powinien zniknąć w przyszłości, ponieważ PostgreSQL 9.4 prawdopodobnie będzie miał znacznie lepszą współpracę między typami hstore i json, co pozwoli ci po prostu używać reprezentacji json podczas interakcji z hstore.