我有一个表(entry_table),其中填充了客户当前用于我们的前端Web要素服务的各种地理位置数据。如果用户在WFS中删除了他们的条目,它将在我们的postgres数据库中删除。我想创建一个触发器,它将运行INSERT命令将行(大约25列数据)复制到第二个表(historical_entry_table),因此如果以后再次需要这些条目,则可以轻松检索它们。
这是我到目前为止所做的工作。我是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$
答案 0 :(得分:1)
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$
答案 1 :(得分:1)
我将在这里提出一个有效的例子:
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无法返回触发器。
答案 2 :(得分:0)
发布最后一个答案的正确版本:
CREATE OR REPLACE FUNCTION trigger_backup_row()
RETURN trigger
LANGUAGE plpgsql
AS
$$
BEGIN
INSERT INTO historical_entry_table (col1, col2, etc) values (OLD.col1, OLD.col2, OLD.etc);
RETURN new;
END;
$$