Postgres Upsert 与截断和插入
Postgres Upsert vs Truncate and Insert
我有一个数据流,我可以随时重播以将数据重新加载到 Postgres table。假设我的 table 中有数百万行,并且我添加了一个新列。现在我可以重放该数据流以将数据中的键映射到我刚刚添加的列名。
我有两个选择:
1) Truncate
然后 Insert
2) Upsert
就性能而言,哪个选项更好?
PostgreSQL 进行多版本控制的方式是,每次更新都会创建一个新的行版本。旧的行版本稍后将不得不回收。
这意味着额外的工作和 table 里面有很多空的 space。
另一方面,TRUNCATE
只是扔掉了旧的table,速度非常快。
您可以通过使用 COPY
而不是 INSERT
加载更多数据来获得额外的性能。
我有一个数据流,我可以随时重播以将数据重新加载到 Postgres table。假设我的 table 中有数百万行,并且我添加了一个新列。现在我可以重放该数据流以将数据中的键映射到我刚刚添加的列名。
我有两个选择:
1) Truncate
然后 Insert
2) Upsert
就性能而言,哪个选项更好?
PostgreSQL 进行多版本控制的方式是,每次更新都会创建一个新的行版本。旧的行版本稍后将不得不回收。
这意味着额外的工作和 table 里面有很多空的 space。
另一方面,TRUNCATE
只是扔掉了旧的table,速度非常快。
您可以通过使用 COPY
而不是 INSERT
加载更多数据来获得额外的性能。