有没有办法设置"到期"时间,之后在PostgreSQL中自动删除数据条目?

 VW旻shi只吃货8453 发布于 2022-12-19 17:04

有没有办法在PostgreSQL中的数据条目上设置某种"到期"时间?我正在考虑与EXPIRERedis相同的东西.

我不打算存储时间戳,然后手动编写某种cron作业来检查哪些条目已过期.

我试图找出PostgreSQL中是否有任何本机功能可以提供这种功能,或者是否有必要为将来的版本请求这样的功能.

2 个回答
  • 没有内置的过期功能,但如果您的目标是自动使字段过期并且逻辑中包含逻辑(因此没有像cron作业那样的外部依赖),那么您始终可以编写触发器.下面是一个触发器的示例,该触发器从表中删除时间戳大于1分钟的行.只要在同一个表中插入新行,就会执行它.显然,您可以根据需要将触发器设置为在其他条件和各种到期日期执行.我使用以下网站作为基础:http://www.the-art-of-web.com/sql/trigger-delete-old/

    CREATE TABLE expire_table (
        timestamp timestamp NOT NULL DEFAULT NOW(),
        name TEXT NOT NULL
    );
    
    INSERT INTO expire_table (name) VALUES ('a');
    INSERT INTO expire_table (name) VALUES ('b');
    INSERT INTO expire_table (name) VALUES ('c');
    
    select * from expire_table;
             timestamp          | name 
    ----------------------------+------
     2014-09-26 15:33:43.243356 | a
     2014-09-26 15:33:45.222202 | b
     2014-09-26 15:33:47.347131 | c
    (3 rows)
    
    CREATE FUNCTION expire_table_delete_old_rows() RETURNS trigger
        LANGUAGE plpgsql
        AS $$
    BEGIN
      DELETE FROM expire_table WHERE timestamp < NOW() - INTERVAL '1 minute';
      RETURN NEW;
    END;
    $$;
    
    CREATE TRIGGER expire_table_delete_old_rows_trigger
        AFTER INSERT ON expire_table
        EXECUTE PROCEDURE expire_table_delete_old_rows();
    
    INSERT INTO expire_table (name) VALUES ('d');
    
    select * from expire_table;
             timestamp          | name 
    ----------------------------+------
     2014-09-26 15:36:56.132596 | d
    (1 row)
    

    2022-12-19 17:06 回答
  • 否。没有这样的功能。

    我看不到它比(1)仅是“过期”时间戳或(2)时间戳+ cron-job / pgAgent所能做的更多。

    听起来不像是要添加到核心的一般功能。您可以很简单地编写一个扩展程序来处理这种事情,既可以通过cron-job调用,也可以通过背景工作进程调用。

    我在pgxn上什么都看不到,所以大概没有太多需求。

    2022-12-19 17:06 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有