触发器删除postgresql中的过去记录
问题描述:
我只想维护当前1个月的记录日志细节。需要删除过去的记录日志细节了尝试这种代码,但不能工作这一点,触发器删除postgresql中的过去记录
create sequence userseq1;
CREATE TABLE users
(id integer NOT NULL DEFAULT nextval('userseq1'::regclass)
);
INSERT INTO users VALUES(126);
CREATE TABLE History
(userid integer
, createdate timestamp
);
CREATE OR REPLACE FUNCTION recordcreatetime() RETURNS trigger language plpgsql
AS $$
DECLARE
BEGIN
INSERT INTO History values(new.id,NOW());
RETURN NEW;
END;
$$;
CREATE TRIGGER user_hist
BEFORE INSERT ON users
FOR EACH ROW
EXECUTE procedure recordcreatetime();
但是,它正在由一个adding.I插入值测序一个要删除以前1月历史日志详细信息。我想这下面的代码,它不工作
CREATE OR REPLACE FUNCTION trf_keep_row_number_steady()
RETURNS TRIGGER AS
$body$
DECLARE
BEGIN
IF (SELECT count(createdate) FROM history) > rownum_limit
THEN
DELETE FROM history
WHERE createdate = (SELECT min(createdate) FROM history);
END IF;
END;
$body$
LANGUAGE plpgsql;
CREATE TRIGGER tr_keep_row_number_steady
AFTER INSERT ON history
FOR EACH ROW EXECUTE PROCEDURE trf_keep_row_number_steady();
答
我可以在你的第二个代码块中看到,你有history
表的触发器和你在同一个触发器试图DELETE FROM history
。
不允许通过同一张表上的触发器在表上插入/更新/删除。请考虑其他一些替代方法,例如,在主要INSERT
声明之前或之后为所需的行清理运行单独的DELETE
声明。
感谢您的回复。我试过,但它不工作。你可以提供任何文档或示例代码....... – Patrick 2013-03-26 11:43:15
其实postgresql允许这样做。但@Patrick应该提供一个错误信息,而不是“它不工作”。乍一看,函数在语法上不正确,无论如何因为这个'rownum_limit'没有定义。 – 2013-03-26 17:03:55