Postgresql 在触发器中使用光标

Postgresql 在触发器中使用光标,postgresql,Postgresql,我试图编写一个触发器函数,在执行插入时执行。条件是,如果id已经存在,那么创建时间现在应该是死亡时间 CREATE function archive_temp() returns trigger as ' begin insert into temporary_archive values ( OLD.id, OLD.time_create, OLD.time_dead, OLD.fname, current_user, now(),

我试图编写一个触发器函数,在执行插入时执行。条件是,如果id已经存在,那么创建时间现在应该是死亡时间

 CREATE function archive_temp() returns trigger as '
 begin
   insert into  temporary_archive
  values
 (
 OLD.id,
   OLD.time_create,
   OLD.time_dead,
    OLD.fname,
    current_user,
    now(),
      now(),
  TG_OP
    );
     return null;
    end;
   ' LANGUAGE 'plpgsql';
     -----------------------------

CREATE TRIGGER archive_temps 
AFTER DELETE OR UPDATE 
on temporary_object
FOR EACH ROW
DECLARE 
temporary_archive temporary_object.id%type;
begin
if inserting then 
select id into temporary_archive
from temporary_object
where id = :old.id;
if temporary_archive is not null then

 EXECUTE PROCEDURE archive_temps();
 end if;
 end if;ins

在我看来,从你的例子来看,你正在试图用甲骨文的方式做事。PostgreSQL则不同。我也没有看到在你的代码中任何地方使用游标,所以这个问题可能会误导你


在PostgreSQL中,触发器只能调用过程,并且过程必须基本上是自包含的。本质上,您将不得不对代码进行一些重构。每行
之后唯一可接受的语法是
executeprocedure
,因此您的其他逻辑必须移动到用户定义的函数中。如果需要,可以通过调用函数(如果函数返回bool)在
WHEN
条件下应用函数。或者,您可以将其构建到触发器逻辑中。

我该怎么做?那代码是我能做到的,难道没有人知道怎么做吗?