有没有办法在PostgreSQL中自动删除一个数据input后设置“到期”时间?
有没有办法在PostgreSQL的数据条目上设置某种“过期”时间? 我正在考虑Redis中相当于“EXPIRE”的内容 。
我不想存储时间戳,然后手动编写某种cron作业来检查哪些条目已过期。
我试图找出PostgreSQL中是否有任何可以提供这种function的本地特性,或者是否有必要为将来的版本请求这样的特性。
没有内置的过期function,但如果你的目标是自动过期的领域,并有你的数据库中的逻辑(因此没有外部依赖如cron作业),那么你总是可以写一个触发器。 以下是触发器的一个示例,它从时间戳早于1分钟的表中删除行。 无论何时将新行插入到同一个表中,都会执行该操作。 显然,您可以将触发器设置为在其他条件下执行,并根据需要设置不同的到期date。 我使用以下网站作为此基础: 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)
没有。这个function没有。
(1)只是一个“过期的”时间戳,或者(2)时间戳+ cron-job / pgAgent。
这听起来不像将被添加到核心的一般function。 你可以简单地编写一个扩展来处理这类事情,或者从cron-job调用一个tick或者一个后台工作进程。
我没有看到pgxn上的任何内容 ,所以可能还没有太多需求。