触发删除postgresql中的过去记录

时间:2013-03-26 06:36:55

标签: sql postgresql database

我只想保留当前1个月的记录日志详细信息。需要删除过去的记录日志详细信息。我尝试过这段代码,但无法正常工作,

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();

然而,它正在努力插入值逐个添加。我想删除前一个月的记录日志详细信息。我尝试了下面的代码并且它无法正常工作

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();

1 个答案:

答案 0 :(得分:1)

我可以在你的第二个代码块中看到,你在history表上有一个触发器,你正试图在同一个触发器中DELETE FROM history

不允许通过同一个表上的触发器在表上插入/更新/删除。请考虑其他一些替代方法,例如,为所需的运行单独的DELETE语句在主INSERT语句之前或之后清理行。