簡體   English   中英

更新 jsonb 列中的 bool 值 - jsonb_set

[英]Update bool value in a jsonb column - jsonb_set

使用以下 json 示例:

{
  "red": false,
  "blue": false,
  "yellow": false
}

我必須將其中一個元素更新為 true,預期結果是:

{
  "red": false,
  "blue": false,
  "yellow": true
}

首先,我嘗試以這種方式更新:

UPDATE table_name
   SET jsonb_column_name = jsonb_set(jsonb_column_name, '{yellow}', ('"true"')::jsonb, true) 

但結果是

{
  "red": false,
  "blue": false,
  "yellow": "true"
}

不是我想要的,它是一個字符串,而不是 bool

還試過:

UPDATE table_name
   SET jsonb_column_name = jsonb_set(jsonb_column_name, '{yellow}', true, true)

但是我得到了一個錯誤,這是有道理的,第三個參數必須是 jsonb

SQL Error [42883]: ERROR: function jsonb_set(jsonb, unknown, boolean, boolean) does not exist
  Hint: No function matches the given name and argument types. You might need to add explicit type casts.

我不能使 true::jsonb 因為 bool 不能轉換為 jsonb:

SQL Error [42846]: ERROR: cannot cast type boolean to jsonb

還有另一種方法可以做到這一點嗎? 不需要使用 jsonb_set,我想我可以使用 str_replace 然后轉換為 jsonb 但我不知道它是否安全

感謝 Edouard 的回答,我意識到我沒有測試所有明顯的可能性。

'true'::jsonb只用單引號起作用

UPDATE table_name
   SET jsonb_column_name = jsonb_set(jsonb_column_name, '{yellow}', 'true'::jsonb, true)

對於此示例,您不需要jsonb_set 由於這是一個jsonb列,您可以簡單地附加新值,現有的鍵/值對將替換為新的。

update table_name
   set jsonb_column_name = jsonb_column_name || '{"yellow": true}';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM