gpt4 book ai didi

sql - 更换 table 的最佳方法

转载 作者:行者123 更新时间:2023-11-29 13:13:21 28 4
gpt4 key购买 nike

我有一个网络应用程序正在运行从 csv 文件生成的数据库表。

此表需要经常从 csv 更新。该表需要与 csv 完全匹配,即如果 csv 中不再存在记录,则该记录不应再存在于表中或应被软删除。

执行此操作的正确方法是什么?

看起来最简单的方法是:

  1. 创建临时表
  2. 导入 csv 到临时表
  3. 删除事件表
  4. 将临时表重命名为实时表名

这将在应用程序内部编写脚本,因此我认为停机时间不会像删除表和重命名那样花太多时间,但它似乎不是最安全的做事方式,因为有一段时间不存在表的地方。

我尝试改为:

  1. 创建临时表
  2. 导入 csv 到临时表
  3. 使用临时表中的数据更新实时表中的记录
  4. 删除事件表中临时表中不存在的记录

理论上听起来更好,但速度非常慢。第一种方法只需要几秒钟。第二种方法更新需要很长时间,我让它运行了 10 分钟,然后取消它,因为它还没有完成。

我是这样更新的:

update table_name as t
set
column1 = t.column1,
column2 = t.column2,
-- etc..
from table_name_temp

处理这种情况的正确方法是什么?

最佳答案

您要做的是将您的简单解决方案包装在事务中。这将确保您的步骤以原子方式执行。请参阅:https://www.tutorialspoint.com/sql/sql-transactions.htm了解更多信息。

Postgres 支持 ALTER TABLE .. RENAME .

关于sql - 更换 table 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52049943/

28 4 0