我似乎无法逻辑地将这个错误产生,不像大多数人几乎没有提供任何关于原因的信息(通常看起来他们非常好的预处理器或你可以深入了解逻辑,但在这里我没有得到任何错误。 我还有另一个功能正常,添加这些键,所以它不是.. 然后交易似乎失败了,当我进入
时我进入终端 update guest_list set coatcheck = true where ticket_number = 3;
" PL / pgSQL函数coatcheck_gen()在SQL语句中的第8行 SQL语句"更新guest_list set coatcheck_num = coat_num,其中ticket_number = old.ticket_number" PL / pgSQL函数coatcheck_gen()在SQL语句中的第8行 SQL语句"更新guest_list set coatcheck_num = coat_num,其中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();
答案 0 :(得分:0)
您通过更新触发器内的表来进行无限循环。
你先调用它并设置coatcheck = true
,然后触发器再次更新表,但是从coatcheck = true
开始它将被触发器再次处理(这个循环永远不会结束)。
你可以替换整行
update guest_list set coatcheck_num = coat_num where ticket_number = old.ticket_number;
通过
new.coatcheck_num = coat_num;
并制作触发器before update