postgresql 删除涉及两个表的记录,并将这条记录存储在第三条记录中

Postgresql delete record involving two tables and store this record in the third record

我正在尝试从 table 'student' 中删除一条记录,在级联删除中它会将其从 'entry' table 中删除。但在删除之前我需要将这条记录存储在第三个 table 'cancel'.

这是我到目前为止的结果:

DELETE FROM "CMPS".student
WHERE sno = '1';    

CREATE TRIGGER canceled BEFORE DELETE     
    ON entry    
    FOR EACH ROW    
    EXECUTE PROCEDURE trigger_backup_row    

CREATE OR REPLACE FUNCTION trigger_backup_row(integer)    
    RETURNS trigger AS    
$$    
    BEGIN    
INSERT INTO cancel (eno, excode, sno) values (NEW.eno, NEW.excode, NEW.sno);    
    RETURN NEW;    
    END;    
$$         
   language PLPGSQL    

但是返回错误。任何帮助将不胜感激。

我想你需要:

CREATE OR REPLACE FUNCTION trigger_backup_row()    
    RETURNS trigger AS    
$$    
    BEGIN    
INSERT INTO cancel (eno, excode, sno) values (OLD.eno, OLD.excode, OLD.sno);    
    RETURN OLD;    
    END;    
$$         
   language PLPGSQL
;

CREATE TRIGGER canceled BEFORE DELETE     
    ON entry    
    FOR EACH ROW    
    EXECUTE PROCEDURE trigger_backup_row()
;
  • 触发函数不使用参数
  • 删除时你没有任何 NEW 行 - 只有 OLD