次の列があります。
key | value
-----------
foo | 1
bar | 2
これをhstore
に変換する推奨方法はありますか?
{foo => 1, bar => 2}
関数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;
_
関連: