Postgres Upsert与截断和插入

时间:2019-04-05 07:21:44

标签: postgresql insert upsert

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

我有两个选择:

1)Truncate,然后Insert

2)Upsert

就性能而言,哪个会是更好的选择?

1 个答案:

答案 0 :(得分:1)

PostgreSQL执行多版本化的方式,每次更新都会创建一个新的行版本。旧行版本将在以后回收。

这意味着额外的工作和表格中有很多空白空间。

另一方面,TRUNCATE只是扔掉了旧表,很快。

通过使用COPY而不是INSERT来加载大量数据,可以提高性能。