Postgres触发器将在删除之前将行插入到另一个表中

问题描述:

我有一个表(entry_table),其中填充了客户端当前为我们的前端Web功能服务使用的各种地理位置数据。如果用户在WFS中删除了他们的条目,它将在我们的postgres数据库中被删除。我想创建一个触发器,它将运行一个INSERT命令将行(大约25列数据)复制到第二个表(historical_entry_table),所以如果将来再次需要这些条目,可以轻松地检索它们。Postgres触发器将在删除之前将行插入到另一个表中

这是我迄今为止的工作。我是Triggers的新手,所以我知道语法是关闭的。不知道该从哪里出发。进出口运行的Postgres 8.4

在表中:

CREATE TRIGGER trigger_name BEFORE DELETE 
    ON entry_table 
    FOR EACH ROW 
    EXECUTE PROCEDURE trigger_backup_row 

本身的功能:

CREATE OR REPLACE FUNCTION trigger_backup_row() 
    LANGUAGE SQL 
    RETURNS trigger AS 
$BODY$ 
BEGIN 

INSERT INTO historical_entry_table (col1, col2, etc) values (OLD.col1, OLD.col2, OL 
RETURN NULL: 

END; 
$BODY$ 

你只是得到它。你的代码在这里,更新:

CREATE OR REPLACE FUNCTION trigger_backup_row() 
    RETURN trigger AS 
$BODY$ 
    BEGIN 
     INSERT INTO historical_entry_table (col1, col2, etc) values (OLD.col1, OLD.col2, OLD.etc); 
    END; 
$BODY$  
+0

我不断收到指向RETURN的合成器错误。检查并发现它需要返回。现在它说错误:没有语言指定 – AlienAnarchist 2015-02-10 18:10:47

+0

尝试添加LANGUAGE SQL,但现在我只是得到一个语法错误的触发器。 – AlienAnarchist 2015-02-10 18:43:32

+0

您可以使用当前正在获取错误的代码更新您的问题吗? – Greg 2015-02-10 18:54:15

我会在这里把一个工作示例:

CREATE OR REPLACE FUNCTION trigger_backup_row() 
    RETURNS trigger AS 
$BODY$ 
    BEGIN 
INSERT INTO PCIcards_backup (MODEL, SUBSYSTEM_DEVICE, ADAPTER, MAPPING) values (NEW.MODEL, NEW.SUBSYSTEM_DEVICE, NEW.ADAPTER, NEW.MAPPING); 
    RETURN NEW; 
    END; 
$BODY$  
    language PLPGSQL 

正如你所看到的,你只需要设置的语言在文件中使用PARAM PLPGSQL因为结束SQL无法返回触发器。