如何解决postgres监听更新触发器中的无限循环
我有一个触发功能,当发生某些事情时(例如,当我向表中添加新记录时),它只是向通道发送通知。我的功能代码是:
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
不幸的是,如果这样做,每次添加一条记录时,通知就会陷入无限循环,不断重复执行该操作,使程序无用。插入删除后使用就可以了。
在触发器中使用更新有什么特别之处(理想情况下,我将拥有一个after insert或update或delete子句,以捕获表上的任何操作),这使我的代码失控了?谢谢!
解决方法
关于UPDATE没有什么特别的。问题可能出在您未显示给我们的代码部分。
例如,如果您的python代码通过更新tb_demo中的一行来响应通知,则显然该更新将触发另一个通知,这将触发另一个更新,等等。
,我正在更新相关记录,触发无限循环更新->触发->更新。固定。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。