hstore
を作成すると
CREATE EXTENSION hstore;
SELECT hstore(null::my_type);
hstore
------------------------------------------------
"name"=>NULL, "street"=>NULL, "location"=>NULL
(1 row)
jsonb
メソッドですが、
SELECT to_jsonb(null::my_type);
to_jsonb
----------
(1 row)
これは、マージしようとしたときにも驚くべき効果を生み出します(||
)別の同様のタイプ、
SELECT hstore(null::my_type) || hstore('name', 'Evan');
?column?
--------------------------------------------------
"name"=>"Evan", "street"=>NULL, "location"=>NULL
(1 row)
SELECT to_jsonb(null::my_type) || jsonb_build_object('name', 'Evan');
?column?
----------
(1 row)
ここでの回避策は、jsonb_populate_record
のプロキシによってjsonbを構築することです。
SELECT jsonb_populate_record(
null::my_type,
'{}'
);
または、レコードタイプを更新しようとしているだけの場合は、1回の呼び出しで直接更新できます。
SELECT jsonb_populate_record(
null::my_type,
jsonb_build_object('name', 'Evan')
);