我只想保留当前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();
答案 0 :(得分:1)
我可以在你的第二个代码块中看到,你在history
表上有一个触发器,你正试图在同一个触发器中DELETE FROM history
。
不允许通过同一个表上的触发器在表上插入/更新/删除。请考虑其他一些替代方法,例如,为所需的运行单独的DELETE
语句在主INSERT
语句之前或之后清理行。