我有一个数据流,可以随时重播以将数据重新加载到Postgres表中。可以说我的表中有数百万行,并添加了新列。现在,我可以重播该数据流,以将数据中的键映射到我刚刚添加的列名。
我有两个选择:
1)Truncate
,然后Insert
2)Upsert
就性能而言,哪个会是更好的选择?
答案 0 :(得分:1)
PostgreSQL执行多版本化的方式,每次更新都会创建一个新的行版本。旧行版本将在以后回收。
这意味着额外的工作和表格中有很多空白空间。
另一方面,TRUNCATE
只是扔掉了旧表,很快。
通过使用COPY
而不是INSERT
来加载大量数据,可以提高性能。