【发布时间】:2018-09-21 22:48:03
【问题描述】:
我想要一个触发函数来将<table_name>.date_updated 更新为now()。我在update 语句中使用TG_TABLE_NAME,因为我有很多表会调用这个触发器函数。但是 - 我错过了一些基本的东西,因为每当我尝试将 \copy 数据放入我的表时,我都会收到错误 relation "tg_table_name" does not exist。
这是我的触发函数:
create or replace function table_updated()
returns trigger as
$body$
begin
update TG_TABLE_NAME
set NEW.date_updated = now();
end
$body$
language plpgsql;
create trigger "updateDate"
before update or insert on <table_name>
for each row execute procedure table_updated();
我正在使用 Postgres 10.5 版。
如果我理解正确,我需要以某种方式实现execute,但我不确定如何实现。
【问题讨论】:
-
我猜你需要动态 SQL 创建一个查询,将变量中的名称作为字符串,然后执行它。但您真的要更新每一行吗?
UPDATE查询中没有WHERE。通常,更改或插入的行由触发器更改。但这可以通过NEW记录来完成。 -
你只是想设置
NEW.date_updated = now()吗?看看这里的答案:stackoverflow.com/questions/16102188/… -
我在输入时完全忽略了添加
NEW- 感谢您指出这一点!我希望做的是避免为每个表创建 15 个函数、15 个触发器——我宁愿有 1 个函数、15 个触发器。我只是不知道如何在函数中一般/动态地引用表触发器。
标签: sql postgresql database-trigger