2017-08-03 119 views
2

我有一個jsonb列有一個實體,嵌套子實體的數據庫表。比方說,我們有:Postgres jsonb_set多個嵌套字段

SELECT jsonb_set('{"top": {"nested": {"leaf" : 1}}}', '{top,nested,leaf}', '2');

哪些工作的優良通過更新top.nested.leaf到2

但是如果我們想要做的多個領域,比如什麼:

SELECT jsonb_set('{"top": {"nested": {"leaf" : 1}, "other_nested": {"paper": 0}}}', '[{top,nested,leaf}, {top,other_nested,paper}]', '[2, 2]');

的以上不起作用,並說:

ERROR: malformed array literal: "[{top,nested,leaf}, {top,other_nested,paper}]" LINE 1: ...": {"leaf" : 1}, "other_nested": {"paper": 0}}}', '[{top,nes... ^ DETAIL: "[" must introduce explicitly-specified array dimensions.

任何想法?

+0

我也曾嘗試以下操作: '''CREATE TABLE測試(數據jsonb); INSERT INTO test(data)VALUES('{「top」:{「nested」:{「leaf」:1,「paper」:10},「other_nested」:{「paper」:0,「leaf」:0 }}}':: jsonb); UPDATE測試SET數據=數據|| '{「top」:{「nested」:{「leaf」:2},「other_nested」:{「paper」:2}}'; SELECT data FROM test;''' 通過使用連接,這也沒有工作。 – KyleMulder

回答

0

https://www.postgresql.org/docs/current/static/functions-json.html

jsonb_set(target jsonb, path text[], new_value jsonb[, create_missing boolean]) 

既不路徑,也沒有新的價值不能有多個值。你有兩次通緝的結果運行它,比如:

SELECT jsonb_set(
    '{"top": {"nested": {"leaf" : 1}, "other_nested": {"paper": 0}}}' 
, '{top,nested,leaf}' 
, '2' 
); 
SELECT jsonb_set(
    '{"top": {"nested": {"leaf" : 1}, "other_nested": {"paper": 0}}}' 
, '{top,other_nested,paper}' 
, '2' 
); 
+0

根據我對我的開場白問題的評論,是否有一種方法可以連接? – KyleMulder

+0

如果你想在一個語句中,更好地嘗試'jsonb_set(jsonb_set())' –

+0

在jsonb_set或'||'連接得到的實現中通過傳遞一堆字段與它們的新對象/值在。 – KyleMulder