2

C ライブラリを使用した HSTORE データ アクセスに関するドキュメントが見つかりません。現在、クエリで HSTORE 列を配列に変換することを検討していますが、そのような変換を回避する方法はありますか?

4

1 に答える 1

2

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_arrayorを使用することです。hstore_to_matrix

hstore 値を作成するには、配列を取る hstore コンストラクターを使用できます。コード内で PostgreSQL の配列表現を処理したくない場合は、これらの配列をarray_aggover句で作成できます。VALUES

PostgreSQL 9.4 では、hstore と json 型の間の相互運用性が大幅に向上し、hstore とやり取りするときに json 表現のみを使用できるようになるため、この混乱は将来解消されるはずです。

于 2014-03-21T01:51:45.577 に答える