gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:37:22 68 4
gpt4 key购买 nike

有什么方法可以为 PostgreSQL 中的数据条目设置某种“过期”时间吗? ?我正在考虑等同于 EXPIRE in Redis 的东西.

我不想存储时间戳,然后手动编码某种 cron检查哪些条目已过期的作业。

我正在尝试找出 PostgreSQL 中是否有任何 native 特性可以提供这种功能,或者在未来的版本中请求此类特性是否有意义。

最佳答案

没有内置的过期功能,但如果您的目标是自动使字段过期并将逻辑包含在您的数据库中(因此没有像 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)

关于database - 有没有办法设置 "expiry"时间,之后在 PostgreSQL 中自动删除数据条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26046816/

68 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com