有没有办法在PostgreSQL中的数据条目上设置某种"到期"时间?我正在考虑与EXPIRE
Redis相同的东西.
我不打算存储时间戳,然后手动编写某种cron作业来检查哪些条目已过期.
我试图找出PostgreSQL中是否有任何本机功能可以提供这种功能,或者是否有必要为将来的版本请求这样的功能.
没有内置的过期功能,但如果您的目标是自动使字段过期并且逻辑中包含逻辑(因此没有像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)
否。没有这样的功能。
我看不到它比(1)仅是“过期”时间戳或(2)时间戳+ cron-job / pgAgent所能做的更多。
听起来不像是要添加到核心的一般功能。您可以很简单地编写一个扩展程序来处理这种事情,既可以通过cron-job调用,也可以通过背景工作进程调用。
我在pgxn上什么都看不到,所以大概没有太多需求。