结合 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;
如果有人能比我刚才解释得更合乎逻辑,请随时纠正我!
我想要一个触发器函数来将 <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;
如果有人能比我刚才解释得更合乎逻辑,请随时纠正我!