psql 复制命令挂起大型 CSV 数据集

psql copy command hangs with large CSV data set

我正在尝试将一些大型数据集从 CSV 加载到 Postgres 11 数据库 (Windows) 中以进行一些测试。我 运行 遇到的第一个问题是,对于非常大的 CSV,我得到了这个错误:"ERROR: could not stat file "'D:/temp/data.csv' 未知错误”。所以在搜索之后,我找到了一个从 zip 文件加载数据的解决方法. 所以我设置了 7-zip 并且能够使用这样的命令加载一些数据:

psql -U postgres -h localhost -d MyTestDb -c "copy my_table(id,name) FROM PROGRAM 'C:/7z e -so d:/temp/data.zip' DELIMITER ',' CSV"

使用这种方法,我能够加载一堆不同大小的文件,其中一个有 1 亿条记录,压缩后为 700MB。但是后来我有一个更大的文件,其中包含 1 亿条记录,压缩后大约 1GB,出于某种原因,这个文件让我感到悲伤。基本上,psql 进程只是保持 运行 并且永不停止。根据数据文件的增长,我可以看到它会生成特定点的数据,但在某个点它会停止增长。我在名为 17955、17955.1、17955.2 等的数据文件夹中看到 6 个文件,直到 17955.5。这些文件上的 Date Modified 日期继续更新,但它们的大小没有增加,我的 psql 程序就在那里。如果我关闭该进程,我将丢失所有数据,因为我假设它会在进程未 运行 完成时回滚。

我查看了data/log文件夹中的日志,里面似乎没有什么有意义的东西。我不能说我很习惯 Postgres,我使用 SQL 服务器最多,所以寻找关于在哪里查看的提示,或者打开什么额外的日志记录,或者任何其他可以帮助计算的提示为什么这个过程停滞不前。

感谢@jjanes 上面的评论(遗憾的是 he/she 没有添加答案)。我将 1 亿条记录添加到带有外键的 table 到另一个具有 1 亿条记录的 table。我删除了外键,添加了记录,然后重新添加了外键,就成功了。我想检查外键对于这种大小的批量插入来说太多了。