Postgres plpgsql JSON赋值

时间:2016-02-08 17:38:26

标签: json postgresql plpgsql

我正在使用Postgres中的JSONB并尝试了解如何在plpgsql中正确执行对JSON属性的赋值。

由于分配上的前导括号,此查询代码段会报告语法错误,但是我很确定需要这种语法来引用plpgsq中的JSON对象:

IF (NEW."data")->>'custom' IS NULL THEN
  (NEW."data")->>'custom' := 0;
END IF;

这是在postgresql触发器中,因此NEW是与新数据库记录相关的提供变量。

有人可以建议为JSON(B)属性赋值的正确方法是什么?

1 个答案:

答案 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;