【发布时间】:2018-09-24 22:23:39
【问题描述】:
我有一个非常简单的触发器,它会在 table_b 更新时更新 table_a 中的列:
create or replace function trigger_update_status()
returns trigger as
$body$
begin
-- UPDATE TABLE A
update table_a
set a_status = new.b_status,
date_updated = now()
from table_b
where table_a.serial_number = table_b.serial_number;
return new;
end;
$body$
language plpgsql;
create trigger "currentStatus" after update or insert on table_b
for each row
execute procedure trigger_update_status();
但是,我收到没有RETURN 值的错误:
ERROR: control reached end of trigger procedure without RETURN
我对@987654327@ 在这里是否合适感到困惑,因为我一直在阅读相互矛盾的信息。 一方面,这里的答案 (Postgres trigger after insert accessing NEW) 清楚地表明:“始终忽略 AFTER 触发的行级触发器或 BEFORE 或 AFTER 触发的语句级触发器的返回值;它可能是最好是 null。但是,这些类型的触发器中的任何一个仍可能通过引发错误来中止整个操作。"
另一方面,我这里的触发器基本上与这里的触发器 (https://dba.stackexchange.com/questions/182678/postgresql-trigger-to-update-a-column-in-a-table-when-another-table-gets-inserte) 匹配,它同时调用了 NEW 和 AFTER。所以我不确定为什么我的不工作。非常感谢任何帮助!
【问题讨论】:
-
为我工作:dbfiddle.uk/…
标签: sql postgresql triggers database-trigger