首页 > 解决方案 > 从 csv 文件中的列覆盖 Postgres 中的列

问题描述

我有一张大表,我希望只更新一列。该列的值存在于 CSV 文件中。我想避免单个插入事件列,因为这需要很长时间。我更喜欢 COPY 之类的东西,这样我就可以直接将新值转储到旧值上。但是转储特定的 using 副本会将其附加到表的末尾而不是覆盖它。

有什么建议么?

标签: pythonpython-3.xdatabasepostgresqlpostgresql-9.3

解决方案


建议:插入比在数据库中更新要快,因此可以按照以下步骤操作:

  1. 将 CSV 加载到临时表。并非所有列都需要主键和需要在主表中更新的列。
  2. 将主表重命名为 main_temp
  3. 重新创建主表(现在没有记录)
  4. 根据主键加入 main_temp 和临时表并插入主表(从临时表中选择特定列,而不是从主表中选择特定列)
  5. 删除 main_temp

推荐阅读