Postgresql-13

如何更新 jsonb 欄位的屬性值?

  • July 6, 2021

我有一個名為 attr 欄位的 jsonb 類型,其中包含以下內容:

{ 
 "pid": 1,
 "name": "john",
 "is_default": true
}

如何將 is_default 更改為 false?

我嘗試在下面執行,但沒有運氣。

update attr set attr ->> 'is_default' = false where sales_type = 2

有兩種方法可以做到這一點:

簡單地連接新的鍵/值對:

update the_table
 set attr = attr || '{"is_default": false}';

這是有效的,因為當連接兩個jsonb值時,現有的鍵將被覆蓋。

另一種方法是使用jsonb_set()它更新通過“路徑”指定的位置的值(通過數組的元素定義)

update the_table
 set attr = jsonb_set(attr, array['is_default'], to_jsonb(false));

使用即將發布的第 14 版(將於 2021 年第四季度發布),您將能夠將其簡化為:

update the_table
  set attr['is_default'] = to_jsonb(false);

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