背景
有时候我们需要定时删除一些表数据比如一些log表,值需要存储7天的数据,如果有程序,比如java来处理。就需要写一个定时器来处理,比较麻烦。比较方便简单的做法就是使用触发器
这里我有一个 log表 想定时删除7天前的数据。
前置处理
建表
create table logistics_xml
(
id bigserial not null
constraint logistics_xml_pk
primary key,
company text,
order_id text,
xml text,
ctime timestamp(0) default now()
);
插入数据
insert into logistics_xml(id, company, order_id, xml, ctime) VALUES (1, '232', '2323', '2424', now());
insert into logistics_xml(company, order_id, xml, ctime) VALUES ('232', '2323', '2', '2021-06-01 03:05:53');
insert into logistics_xml(company, order_id, xml, ctime) VALUES ('66', '2323', '2', now());
实现
-
编写函数
CREATE OR REPLACE FUNCTION auto_del_logistics_xml ()
RETURNS TRIGGER AS $res$
BEGIN
delete from logistics_xml where logistics_xml.ctime < (now() - interval '7 day');
return NULL;
END;
$res$ LANGUAGE plpgsql;
-
创建触发器
CREATE TRIGGER auto_del_user AFTER INSERT ON logistics_xml
FOR EACH ROW EXECUTE PROCEDURE auto_del_logistics_xml();
触发器的一些介绍 https://www.runoob.com/postgresql/postgresql-trigger.html
这里主要将函数与表logistics_xml绑定,触发事件为 INSERT。当然还可以修改为 其他事件
这种做法虽然可行,但是不是很建议,因为每次插入都要执行 delete from logistics_xml where logistics_xml.ctime < (now() – interval ‘7 day’) 严重影响性能,这里基于业务作取舍
这里创建完成后我们再测试插入一条数据
insert into logistics_xml(company, order_id, xml, ctime) VALUES ('66', '2323', '2', now());
原文始发于微信公众号(小奏技术):PostgreSQL定时删除表数据
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/30474.html