PostgreSQL定时删除表数据

背景

有时候我们需要定时删除一些表数据比如一些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(0default 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());

实现

  1. 编写函数
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;
  1. 创建触发器
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定时删除表数据可以看到之前插入6月1号的数据被删除了。


原文始发于微信公众号(小奏技术):PostgreSQL定时删除表数据

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/30474.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!