我正在一个项目,以使进程的摄入一个40GB的csv到一个Rails应用程序幂等使用Postgres表。如果摄入的工作人员失败了,应该重新运行工作人员,并且如果以前成功完成,摄入将在停止的地方回收,或者什么都不做。如何重试Postgres COPY错误后与大CSV
我已经解决了检索CSV文件idempotent,但我不确定的部分是关于PostgreSQL在COPY
操作期间如何处理失败。
进口是常规的,类似于:
copy my_table (id,col1, col2, etc) from 'large.csv' with (DELIMITER ',')
我能找到失败的最来源于doc:
COPY在第一个错误停止操作。这不应该导致在COPY TO事件中出现问题,但目标表已经收到COPY FROM中的早期行。这些行将不可见或可访问,但它们仍占用磁盘空间。
是否有可能COPY
失败,而插入一行会留下一些列中丢失或损坏的数据?
如果在失败时COPY
命令是40GB文件的50%,那么在重试时插入剩余行的最有效方法是什么?
你可能想要阅读更多关于http://pgloader.io/howto/pgloader.1.html,它有'--on-error-stop' –