我一直在使用INSERT ... ON CONFLICT DO UPDATE
插入/更新数据。我的问题是,我大多数时候都想进行更新:每天更新一次计数器。如果该日期没有数据,则创建该行。这种创建只会发生一次(显然),但是更新每天可能会发生数百万次。使用INSERT ... ON CONFLICT DO UPDATE
仍然是正确的方法吗?是否有等同于“尝试先更新,如果失败则插入行”的等效项? (例如实际的“ UPSERT”)。
答案 0 :(得分:1)
没有UPDATE
的变体具有相同的行为,原因很简单,即它会与INSERT ... ON CONFLICT
做完全相同的事情。不用担心名字。
如果每天每一行都有数百万的更新,则您应该更加担心VACUUM
。
如果可以的话,不要索引将经常更新的属性并创建fillfactor
小于100的表。您可以获得效率更高的&ldauo; HOT更新”,这将大大减少磁盘写入量和需要VACUUM
。
请确保通过降低autovacuum_vacuum_cost_delay
来调整自动真空度,使其更具侵略性。