错误:无法统计文件“ XX.csv”:未知错误

时间:2018-11-28 15:37:06

标签: postgresql large-files postgresql-copy

我运行以下命令:

COPY XXX FROM 'D:/XXX.csv'  WITH (FORMAT CSV, HEADER TRUE, NULL 'NULL')

在Windows 7中,它成功导入了小​​于1GB的CSV文件。

如果文件大于1GB,我会收到“未知错误”。

[Code: 0, SQL State: XX000]  ERROR: could not stat file "'D:/XXX.csv'  Unknown error

如何解决此问题?

6 个答案:

答案 0 :(得分:3)

https://github.com/MIT-LCP/mimic-code/issues/493 alistairewj评论了2018年11月3日•► 修改

好的,无法统计的文件“ CHARTEVENTS.csv”:未知错误实际上是PostgreSQL 11中的一个错误。在后台,它调用fstat()来确保该文件不是目录,不幸的是fstat ()是一个32位程序,无法处理诸如chartevents之类的大文件。我使用PostgreSQL 10.5在Windows上测试了该构建,但没有收到此错误,因此我认为它是相当新的。

最好的解决方法是保持文件压缩(即,将其保存为.csv.gz文件),并使用7zip直接从压缩文件中加载数据。在测试中,这似乎仍然有效。这里有一个关于如何执行此操作的非常详细的教程:https://mimic.physionet.org/tutorials/install-mimic-locally-windows/

上面的简短版本是:保留.csv.gz文件,将7zip二进制文件添加到Windows环境路径中,然后调用postgres_load_data_7zip.sql文件以加载数据。您可以在所有内容之后使用postgres_checks.sql文件,以确保正确加载了所有数据。

edit:对于以后出现的错误(正在使用这种7zip方法),我不确定为什么它没有加载。尝试仅重新下载ADMISSIONS.csv.gz文件,看看它是否仍然引发相同的错误。也许有7zip的新版本需要我更新脚本或其他内容!

答案 1 :(得分:3)

您可以通过在程序中通过管道传输文件来解决此问题。例如,我只是使用它从Windows 10和PostgreSQL 11上的24GB文件中复制。

copy t(c,d) from program 'cmd /c "type x:\path\to\file.txt"' with (format text);

这会将文本文件file.txt复制到表t的列cd中。

这里的技巧是在cmd的单个命令模式下运行/c并告诉type出问题的文件。

答案 2 :(得分:1)

通过pgAdmin和AWS,我使用CSVSplitter分割成小于1GB的文件。 me脚,但工作。 pgAdmin import追加到现有表。 (为了避免由于源文件中未加引号的文本而导致的错误,将转义字符从'更改为“。通常我在LibreOffice中应用引号,但这些文件太大而无法打开。

答案 3 :(得分:1)

此问题已在 PostgreSQL v14 的提交 bed90759f 中修复。

错误的文件限制实际上是 4 GB。

此修复程序的侵入性太大,无法向后移植,因此您只能升级以避免出现问题。一旦修复程序进行了一些现场测试,您就可以游说 pgsql-hackers 邮件列表以将其反向移植。

答案 4 :(得分:0)

对于尝试在Postgres 11中使用大于1gb的文件后搜索此Postgres错误消息的其他人,我可以确认上述@亚军吴的回答是正确的。这确实是一个大小问题。

我尝试了一种不同于@亚军吴和@Loren的方法:我只是卸载了Postgres 11并安装了稳定版本的Postgres 10.7。 (顺便说一下,如果要紧的话,我在Windows 10上。)

我重新运行了提示该错误的原始代码,瞧瞧,几分钟后,我用中等大小的csv文件(〜3gb)中的数据填充了一个新表。最初,我尝试使用每个@Loren使用CSVSplitter的方法,在直到接近用完计算机上的存储空间之前,它都可以正常工作。 (感谢,《战地风云5》。)

就我而言,我所依赖的PGSQL 11中没有任何版本10.7中没有的内容,因此我认为这对于遇到此问题的其他任何人都是一个很好的解决方案。感谢以上每个人的贡献,尤其是对OP首先发布此内容的贡献。我治愈了巨大的头痛!

答案 5 :(得分:0)

似乎这不是数据库问题,而是psql / pgadmin的问题。解决方法是使用先前psql版本中的管理软件:

  1. 使用现有的PostgreSQL 11数据库
  2. 从PostgreSQL 10安装中安装psql或pgadmin,并使用它上传文件(使用问题中显示的命令)

希望这可以帮助遇到相同问题的任何人。