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