gpt4 book ai didi

ruby-on-rails - 如何在大 CSV 出错后重试 Postgres COPY

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

我正在开展一个项目,使将 40GB 的 csv 提取到 Rails 应用程序中使用的 Postgres 表中的过程是幂等的。如果摄取 worker 失败,则应该重新运行该 worker 并且摄取将从它停止的地方重新开始,或者如果之前成功完成则什么都不做。

我已经解决了使 CSV 文件检索幂等的问题,但我不确定的部分是关于 Postgres 在 COPY 操作期间如何处理故障。

导入是例行的,类似于:

copy my_table (id,col1, col2, etc) from 'large.csv' with (DELIMITER ',')

我能找到的关于失败的最多信息来自 doc :

COPY stops operation at the first error. This should not lead to problems in the event of a COPY TO, but the target table will already have received earlier rows in a COPY FROM. These rows will not be visible or accessible, but they still occupy disk space.

插入行时 COPY 失败是否可能会在某些列中留下丢失或损坏的数据?

如果 COPY 命令在 40GB 文件失败时执行了 50%,重试时插入剩余行的最有效方法是什么?

最佳答案

Is it possible a COPY failure while inserting a row would leave missing or corrupt data in some of the columns?

没有。它使用一些磁盘空间,当您向表中添加数据时会重新使用这些空间,或者当您VACUUM FULL 表时释放这些空间。但它在 SQL 级别以任何方式都不可见。

就 SQL 级别而言,COPY 已完全撤消。你不能恢复,因为没有什么可以恢复的。事务回滚,所有复制的数据都被丢弃。

您需要使用保存点或临时提交分批COPY。或者使用外部加载程序。

关于ruby-on-rails - 如何在大 CSV 出错后重试 Postgres COPY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46045335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com