MongoDB的基本概念是,“封顶集合”允许您设置表格的最大大小,当达到大小限制时,系统将清除旧数据。
是否有人在PostgreSQL中设计了类似的设置并在生产环境中使用了它?
是否有人在PostgreSQL中设计了类似的设置并在生产环境中使用了它?
CREATE TABLE capped_collection (
id integer NOT NULL,
data text);
MAXVALUE
设置为所需的封顶集合大小,并使用CYCLE
选项,以便序列将计数到MAXVALUE
,然后重新从1开始。CREATE SEQUENCE capped_collection_id_seq
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 10000
CACHE 1
CYCLE
OWNED BY capped_collection.id;
MAXVALUE
记录预填充表格。我们这样做是为了使每个id值都有一行,并且我们不必担心决定是否执行INSERT或UPDATE操作,只需保持简单和高效即可。UPDATE capped_collection
SET data = 'your data here'
WHERE id = (SELECT nextval('capped_collection_id_seq'))
nextval
命令获取下一个 id,因为我们指定了 CYCLE
,所以它将在达到 MAXVALUE
后回到 1。最终结果是您的表中只会有 MAXVALUE
行,其中最旧的条目将被删除。我从未听说过类似的事情。我想你可以通过使用以下方法模拟带限制表大小或循环队列:
特别有趣的是bovine的回答(即查看未被接受的答案)。
引入一个表示“集合”中索引的列和该列的序列后,每个upsert可基于以下条件进行:
where index = (sequence.nextval % max collection size)