PostgreSQL 触发函数更新错误

PostgreSQL trigger function update error

我似乎无法从逻辑上判断产生的错误,不像大多数人几乎没有提供关于原因的信息(通常看起来他们的预处理器非常好,或者你可以深入研究逻辑,但在这里我没有错误。 我还有另一个运行良好的功能,它添加了这些键,所以它不是...... 除此之外,交易似乎失败了,当我输入

时我进入了终端
 update guest_list set coatcheck = true where ticket_number = 3;

"PL/pgSQL function coatcheck_gen() line 8 at SQL statement SQL statement "update guest_list set coatcheck_num = coat_num where ticket_number = old.ticket_number" PL/pgSQL function coatcheck_gen() line 8 at SQL statement SQL statement "update guest_list set coatcheck_num = coat_num where ticket_number = old.ticket_number"

这会持续几页,然后结束。 我试过使用新的。老的。或者只是要看的数字。没事了。同样的错误。 所有的桌子都很好。所有更新只要按命令完成就可以工作。 它出现在其他地方的例子中似乎是正确的...

函数是

 create or replace function coatcheck_gen() returns trigger as $gencoatcheck$
declare
coat_num bigint; 
begin 
IF (TG_OP = 'UPDATE') then
if ( new.coatcheck = true ) then
coat_num := (old.frkey_id_event + old.frkey_id_guest);
update guest_list set coatcheck_num = coat_num where ticket_number = old.ticket_number;
return new; 
END IF;
return new; 
end if; 
return new; 
end;
$gencoatcheck$ LANGUAGE plpgsql;

触发器

create trigger trg_coatchek_gen after update on guest_list for each row when (new.coatcheck = true) execute Procedure coatcheck_gen();

您正在通过更新触发器内的 table 进行无限循环。 您首先调用它并设置 coatcheck = true,然后触发器再次更新 table 但由于 coatcheck = true 它将再次被触发器处理(并且此循环永远不会结束)。

你应该替换整行

update guest_list set coatcheck_num = coat_num where ticket_number = old.ticket_number;

来自

new.coatcheck_num = coat_num;

并触发 before update