C ライブラリを使用した HSTORE データ アクセスに関するドキュメントが見つかりません。現在、クエリで HSTORE 列を配列に変換することを検討していますが、そのような変換を回避する方法はありますか?
1 に答える
libpqtypes
をある程度サポートしているようですhstore
。
もう 1 つのオプションは、コード内で と直接対話しないようにすることhstore
です。クライアント側でテキスト表現を処理しなくても、データベースでそれを利用できます。hstore フィールドを取得したいとします。あなたはただ使う:
SELECT t.id, k, v FROM thetable t, LATERAL each(t.hstorefield);
または、古い PostgreSQL バージョンでは、風変わりで非標準的な set-returning-function-in-SELECT 形式を使用できます。
SELECT t.id, each(t.hstorefield) FROM thetable t;
(ただし、この方法で複数のレコードを選択すると、問題t
ないのに奇妙な結果が得られることに注意してくださいLATERAL
)。
もう 1 つのオプションは、PostgreSQL 配列表現の扱いに慣れている場合、クエリを実行するときにhstore_to_array
orを使用することです。hstore_to_matrix
hstore 値を作成するには、配列を取る hstore コンストラクターを使用できます。コード内で PostgreSQL の配列表現を処理したくない場合は、これらの配列をarray_agg
over句で作成できます。VALUES
PostgreSQL 9.4 では、hstore と json 型の間の相互運用性が大幅に向上し、hstore とやり取りするときに json 表現のみを使用できるようになるため、この混乱は将来解消されるはずです。