我有一个Web应用程序正在运行从csv文件生成的数据库表。
此表需要经常从csv更新。该表需要与csv完全匹配,即,如果csv中不再存在记录,则该表中将不再存在该记录,或者应对其进行软删除。
执行此操作的正确方法是什么?
似乎最简单的方法是:
这将在应用程序内编写脚本,因此我认为停机时间不会像删除表和重命名那样花太多时间,但似乎并不是最安全的方法,因为有一段时间没有表的地方。
我试图做:
从理论上讲,它听起来不错,但是非常慢。第一种方法只需要几秒钟。第二种更新方法需要花费很长时间,我让它运行10分钟,然后由于尚未完成而将其取消。
我做了这样的更新:
update table_name as t
set
column1 = t.column1,
column2 = t.column2,
-- etc..
from table_name_temp
处理这种情况的正确方法是什么?
答案 0 :(得分:1)
您想要做的是将简单的解决方案包装在事务中。这将确保您的步骤是原子执行的。有关更多信息,请参见:https://www.tutorialspoint.com/sql/sql-transactions.htm。
Postgres支持ALTER TABLE .. RENAME
。
答案 1 :(得分:0)
重命名表方法仅在没有约束或触发器的情况下有效。
在大多数情况下,新表的内容与旧版本的差别不会太大;诀窍是禁止不做任何更改的更新。
步骤:
将csv导入到临时表
从活动表中删除临时表中不存在的记录#删除