PostgreSQLデータベースに2つの新しいhstoreキー/値のペアを追加しようとしています。これを1つのステートメントで行うことは可能ですか、それとも分割する必要がありますか?ここに私が今持っているものがあり、それは機能していません。
with foo as (
select
id,
new_value_1,
new_value_2
from table 3
)
update public.table1
set hstore = hstore('new_key_1',foo.new_value_1),
hstore = hstore('new_key_2',foo.new_value_2)
where id = foo.id
更新で同じ行を2回続けて呼び出すことができないというエラーが発生します。上記のfooステートメントで選択した2つの異なる値を、既存の列のhstoreに新しいキーを持つ値としてhstoreにどのように挿入できますか?行にタグを付けるだけで、値が変更されても、元の値は将来の問題解決のために保存されます。
あなたはそれらを連結することができます:
set hstore_col = hstore('new_key_1',foo.new_value_1)||hstore('new_key_2',foo.new_value_2)
または、2つの配列を受け入れるコンストラクター関数を使用します。
set hstore_col = hstore(array['new_key_1', 'new_key_2'],array[foo.new_value_1, foo.new_value_2])
2つ目のソリューションは、キーが2つではなく2つある場合に拡張が簡単
現在の値を上書きしたくない場合は、それを元の値に追加します。
set hstore_col = hstore_col || hstore('new_key_1',foo.new_value_1)||hstore('new_key_2',foo.new_value_2)
または
set hstore_col = hstore_col || hstore(array['new_key_1', 'new_key_2'],array[foo.new_value_1, foo.new_value_2])