【问题标题】:Accessing current row values in a trigger访问触发器中的当前行值
【发布时间】:2017-08-25 15:25:23
【问题描述】:

我创建了一个函数,它将为表中插入的每一行插入一个 json 值。

但是当我执行插入时,它告诉我该列不存在。

这里是函数:

CREATE OR REPLACE FUNCTION insert_id_function()
RETURNS trigger AS'
BEGIN
  NEW.previewcontent = previewcontent || ''{"id":1}'';
RETURN NEW;
END;'
LANGUAGE plpgsql VOLATILE;

这里是触发器:

CREATE TRIGGER insert_id_trigger
BEFORE INSERT
ON "Telnet"
FOR EACH ROW
EXECUTE PROCEDURE insert_id_function();

这是错误:

`ERROR:  column "previewcontent" does not exist LINE 1: SELECT previewcontent || '{"id":1}'`

这是我的表格定义:

【问题讨论】:

    标签: sql postgresql triggers jsonb


    【解决方案1】:

    这是NEW 记录的一列:

    NEW.previewcontent = NEW.previewcontent || ''{"id":1}'';
    

    如果previewcontent 的类型是jsonb,则使用jsonb_build_object()id 的当前值添加到jsonb 列:

    CREATE OR REPLACE FUNCTION insert_id_function()
    RETURNS trigger AS $$
    BEGIN
        NEW.previewcontent = NEW.previewcontent || jsonb_build_object('id', NEW.id);
        RETURN NEW;
    END;
    $$ LANGUAGE plpgsql VOLATILE;
    

    【讨论】:

    • 啊啊大错特错!谢谢 !你知道我怎样才能得到将用于这个插入语句的 ID 吗?谢谢
    • 完美!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多