Postgres Upsert 与截断和插入

Postgres Upsert vs Truncate and Insert

我有一个数据流,我可以随时重播以将数据重新加载到 Postgres table。假设我的 table 中有数百万行,并且我添加了一个新列。现在我可以重放该数据流以将数据中的键映射到我刚刚添加的列名。

我有两个选择:

1) Truncate 然后 Insert

2) Upsert

就性能而言,哪个选项更好?

PostgreSQL 进行多版本控制的方式是,每次更新都会创建一个新的行版本。旧的行版本稍后将不得不回收。

这意味着额外的工作和 table 里面有很多空的 space。

另一方面,TRUNCATE只是扔掉了旧的table,速度非常快。

您可以通过使用 COPY 而不是 INSERT 加载更多数据来获得额外的性能。