我希望表包含日志并被循环,因此当它按顺序排列到最后一个键时,它将从一个重新开始并重写旧日志。
如果我将序列标记为循环并执行以下请求,我可以做到这一点:
INSERT INTO logs (initiator_id, target_id, action, message) VALUES ($1, $2, $3, $4)
ON CONFLICT (id) DO UPDATE SET target_id=$2, initiator_id=$1, action=$3, message=$4;
我不喜欢的是,如果存在冲突,我需要重复相同的插入(第 2 行)
我的好奇心是什么,这是一种好方法吗,或者还有其他更实用的方法可以让您需要清楚的表格,比如每 3 个坐骑?
或者也许有一种方法可以在不使用序列的情况下生成唯一 ID?
现在我决定制作 2 列主键(日期,initiator_id),因为日志一次始终是 1 个操作。
您可以只使用单调序列(总是向上计数)并根据年龄删除记录
您可以按日期进行表分区,然后删除旧分区
Postgresql 从不替换记录,更新总是创建新记录并将旧记录标记为未使用。Autovacuum 迟早会使旧记录使用的空间可用于保存新记录。如果你想要像 RRDB 这样的东西,你可能应该使用像 RRDB 这样的东西而不是 postgresql。