结合 TG_TABLE_NAME 和 now() SQL 的简单触发器

Simple trigger combining TG_TABLE_NAME and now() SQL

我想要一个触发器函数来将 <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,但我不确定如何实施。

好的,这非常简单,但是留给刚开始使用数据库的其他人解决,以防他们遇到同样的问题。您不需要指定正在函数中更新的 table,因为触发器已分配给所述 table。它知道它是 referencing/updating 本身。

create or replace function table_updated() 
returns trigger as 
$body$
begin 
    new.date_updated = now();
    return new;
end
$body$
language plpgsql;

如果有人能比我刚才解释得更合乎逻辑,请随时纠正我!