【发布时间】:2017-09-05 00:12:43
【问题描述】:
我正在开展一个项目,以使将 40GB csv 摄取到 Rails 应用程序中使用的 Postgres 表中的过程具有幂等性。如果摄取 Worker 失败,则应重新运行该 Worker,并且摄取会从中断的地方重新开始,如果之前成功完成,则什么也不做。
我已经解决了使 CSV 文件的检索具有幂等性,但我不确定的部分是关于 Postgres 如何在 COPY 操作期间处理故障。
导入是例行的,类似于:
copy my_table (id,col1, col2, etc) from 'large.csv' with (DELIMITER ',')
我能找到的关于失败的最多来自doc:
COPY 在出现第一个错误时停止操作。这在 COPY TO 事件中不会导致问题,但目标表将已经收到 COPY FROM 中的较早行。这些行将不可见或无法访问,但它们仍会占用磁盘空间。
在插入行时出现COPY 故障是否会在某些列中留下丢失或损坏的数据?
如果COPY 命令在失败时通过 40GB 文件的 50%,那么在重试时插入剩余行的最有效方法是什么?
【问题讨论】:
-
您可能想了解更多关于 pgloader.io/howto/pgloader.1.html 的内容,其中有
--on-error-stop
标签: ruby-on-rails postgresql csv