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中的一行来响应通知,则显然该更新将触发另一个通知,这将触发另一个更新,等等。

,

我正在更新相关记录,触发无限循环更新->触发->更新。固定。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...