我正在使用Postgres中的JSONB并尝试了解如何在plpgsql中正确执行对JSON属性的赋值。
由于分配上的前导括号,此查询代码段会报告语法错误,但是我很确定需要这种语法来引用plpgsq中的JSON对象:
IF (NEW."data")->>'custom' IS NULL THEN
(NEW."data")->>'custom' := 0;
END IF;
这是在postgresql触发器中,因此NEW是与新数据库记录相关的提供变量。
有人可以建议为JSON(B)属性赋值的正确方法是什么?
答案 0 :(得分:1)
在 Postgres 9.5 中,功能jsonb_set()
非常简单:
if new.data->>'custom' is null then
new.data = jsonb_set(new.data::jsonb, '{custom}', '0'::jsonb);
end if;
Postgres 9.4 中没有jsonb_set()
因此问题更复杂:
if new.data->>'custom' is null then
new.data = (
select json_object_agg(key, value)
from (
select key, value
from jsonb_each(new.data)
union
values ('custom', '0'::jsonb)
) s
);
end if;