我正在尝试创建一个触发器和过程来在UPDATE和INSERT时更新last_changed_timestamp
列。
我可以注册该函数并触发就很好,但是当我尝试更新记录时,我会收到错误消息。
CREATE OR REPLACE FUNCTION update_my_table_last_changed_timestamp()
RETURNS trigger AS
$BODY$
BEGIN
UPDATE my_table SET NEW.last_changed_timestamp = NOW();
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql;
CREATE TRIGGER trigger_update_my_table_last_changed_timestamp
BEFORE UPDATE
ON my_table
FOR EACH ROW
EXECUTE PROCEDURE update_my_table_last_changed_timestamp();
column "new" of relation "my_table" does not exist
我也不完全了解update_my_table_last_changed_timestamp
如何知道它应该更新的行,或者是否有传递给它的参数,如何从触发器到过程中获取这些变量。
答案 0 :(得分:1)
修改NEW记录,无需更新。
BEGIN
NEW.last_changed_timestamp = NOW();
RETURN NEW;
END;
答案 1 :(得分:0)
如果您仍想访问更新触发器中的(其他)表。
您可以在触发器正文的开头添加以下内容:
EXECUTE format('SET search_path TO %I', TG_TABLE_SCHEMA);
由于更新触发器的某种原因,您可能没有在正确的 search_path 上(我相信一些旧的 psql 版本有这个)