Postgresql

為什麼 NULL 記錄中的 jsonb 建構子的行為不像 hstore 建構子?

  • September 16, 2018

當我建構一個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)

這裡的解決方法是通過代理構造jsonbjsonb_populate_record

SELECT jsonb_populate_record(
 null::my_type,
 '{}'
);

或者,如果您只是想更新記錄類型,您可以直接通過一次呼叫來完成。

SELECT jsonb_populate_record(
 null::my_type,
 jsonb_build_object('name', 'Evan')
);

引用自:https://dba.stackexchange.com/questions/217721