gpt4 book ai didi

postgresql - 如何使用 PostgreSQL JSONB_SET() 创建新的深层对象元素

转载 作者:行者123 更新时间:2023-11-29 11:44:33 28 4
gpt4 key购买 nike

我一定是遗漏了一些东西...似乎 JSONB_SET() 无法正常工作 advertised

SELECT JSONB_SET(
'{"k1": {"value": "v1"}}',
'{k2,value}',
'"v2"',
TRUE
);

结果:

----+------------------------
| jsonb_set
| jsonb
----+------------------------
1 | {"k1": {"value": "v1"}}
----+------------------------

我期待 {"k1": {"value": "v1"}, "k2": {"value": "v2"}}我还尝试将 FALSE 作为第四个参数,以防它被颠倒或发生其他情况。

我正在使用 PostgreSQL 9.6.4

最佳答案

文档说:

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

在您的示例中,第二个参数 - '{k2,value}' 是搜索路径,但由于第一个路径是不存在的 k2,结果到 NULL before value 可以被添加/替换。

简单来说 – jsonb_set 并不是要按照您尝试使用搜索路径的方式构建整个 JSON 文档,而是要添加或替换单个键/值。

如果你想像那样添加/替换全新的 JSON 集,你可以像这样使用 ||(连接)运算符:

-- Add example:
SELECT $${"k1": {"value": "v1"}}$$::jsonb || $${ "k2": { "value": "v2"}}$$::jsonb;
?column?
------------------------------------------------
{"k1": {"value": "v1"}, "k2": {"value": "v2"}}
(1 row)

-- Replace example
SELECT $${"k1": {"value": "v1"}}$$::jsonb || $${ "k1": { "value": "v2"}}$$::jsonb;
?column?
-------------------------
{"k1": {"value": "v2"}}
(1 row)

您可以像这样使用 jsonb_set():

SELECT JSONB_SET(
'{"k1": {"value": "v1"}}',
'{k2}',
'{"value": "v2"}',
TRUE
);
jsonb_set
------------------------------------------------
{"k1": {"value": "v1"}, "k2": {"value": "v2"}}
(1 row)

关于postgresql - 如何使用 PostgreSQL JSONB_SET() 创建新的深层对象元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46797443/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com