web-dev-qa-db-ja.com

キーと値の結果セットからhstoreを作成する

次の列があります。

key | value
-----------
foo | 1
bar | 2

これをhstoreに変換する推奨方法はありますか?

{foo => 1, bar => 2}
3
KadekM

関数hstore() を使用するだけです。

その関数にはいくつかのオーバーロードされたバージョンがあります。 1つは、キーおよび値を持つ単一のテキスト配列を取ります。もう1つは2つのテキスト配列を取り、1つはキーを使用し、もう1つは値を使用します。どちらもうまくいきます。デモ:

_SELECT hstore(array_agg(ARRAY[key, value::text]))     AS option1
     , hstore(array_agg(key), array_agg(value::text)) AS option2
FROM  (VALUES ('foo', 1), ('bar', 2)) AS t(key, value);
_

_option1_にはPostgres 9.5以降が必要です。多次元配列の場合は array_agg() が導入されました。古いバージョンについては、以下を参照してください。

valueがタイプtextではない場合、追加したキャストが必要になる場合があります:_value::text_

もちろん、追加モジュールhstoreをデータベースにインストールする必要があります。

_CREATE EXTENSION IF NOT EXISTS hstore;
_

関連:

4