gpt4 book ai didi

postgresql - 为什么 jsonb-functions 在列为空时无法更新?

转载 作者:行者123 更新时间:2023-12-01 23:51:35 25 4
gpt4 key购买 nike

我有一个包含 jsonb 列的表,其中该列的默认值为 null。现在,当我第一次使用 jsonb_setjsonb_insert 尝试使用数据更新此列时,我得到了 UPDATE 1 但实际上,该列保留

我做了一个小测试用例:

CREATE SCHEMA test;
CREATE TABLE test.books (
book_id serial NOT NULL,
data jsonb
);

INSERT INTO test.books (data) VALUES (null);
INSERT INTO test.books (data) VALUES ('{}');

现在我更新两条新记录:

UPDATE test.books SET data = jsonb_set( data, '{zzz}', 'true', true) WHERE book_id = 1;
UPDATE test.books SET data = jsonb_set( data, '{zzz}', 'true', true) WHERE book_id = 2;

结果:

# select * from test.books;
book_id | data
---------+------------------------------------
2 | {"zzz": true}
1 |
(2 rows)

即使两次更新产生相同的结果,第一行仍保持不变。

我查看了文档,但没有发现任何有关此类行为的信息。为什么这样不行?

我正在使用 Postgres 9.6

最佳答案

这是因为 jsonb_set() 被定义为 strict,这意味着如果任何输入参数为 null,则结果为 null。

您需要在调用 jsonb_set 时使用 coalesce():

UPDATE books 
SET data = jsonb_set( coalesce(data, '{}'), '{zzz}', 'true', true)
WHERE book_id = 1;

请注意,对于函数的任何参数都是如此。
因此jsonb_set(data, '{zzz}', null, true)即使 data 不为 null,也会产生 null

关于postgresql - 为什么 jsonb-functions 在列为空时无法更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63391816/

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