【发布时间】:2021-01-11 04:14:37
【问题描述】:
我有一个触发器函数,它只是在发生某些事情时向通道发送通知,例如当我将新记录添加到表中时。我的功能代码是:
create function public.notify()
returns trigger
language 'plpgsql'
as $$
begin
notify "demo_channel";
return null;
end;
$$;
然后我使用以下代码创建触发器:
create trigger tr_demo
after insert
on public.tb_demo
for each row
execute procedure public.notify();
一切都像魅力一样工作,每次添加新行时,我的 psycopg2 Python 脚本都会“实时”检测到通知并基于此执行一些操作。问题是我希望我的触发器在更新现有行时也执行相同的操作,所以我将触发器的第二行更改为:
after insert or update
不幸的是,如果我这样做,每次添加记录时,通知都会进入无限循环,无休止地重复该动作,使程序无用。在插入删除之后使用就可以了。
在触发器中使用 update 有什么特别之处(理想情况下,我会有一个 after insert 或 update 或 delete 子句,以捕获对表的任何操作),它会使我的代码失控?谢谢!
【问题讨论】:
标签: postgresql loops triggers notify listen