Postgresql
為什麼 NULL 記錄中的 jsonb 建構子的行為不像 hstore 建構子?
當我建構一個
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
jsonb_populate_record
SELECT jsonb_populate_record( null::my_type, '{}' );
或者,如果您只是想更新記錄類型,您可以直接通過一次呼叫來完成。
SELECT jsonb_populate_record( null::my_type, jsonb_build_object('name', 'Evan') );