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$
答
我会在这里把一个工作示例:
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无法返回触发器。
我不断收到指向RETURN的合成器错误。检查并发现它需要返回。现在它说错误:没有语言指定 – AlienAnarchist 2015-02-10 18:10:47
尝试添加LANGUAGE SQL,但现在我只是得到一个语法错误的触发器。 – AlienAnarchist 2015-02-10 18:43:32
您可以使用当前正在获取错误的代码更新您的问题吗? – Greg 2015-02-10 18:54:15