web-dev-qa-db-ja.com

エラー:ファイル「XX.csv」をstatできませんでした:不明なエラー

私はこのコマンドを実行します:

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

Windows 7では、1 GB未満のCSVファイルを正常にインポートします。

ファイルのサイズが1GBを超えると、「不明なエラー」が発生します。

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

この問題を解決するにはどうすればよいですか?

8
亚军吴

https://github.com/MIT-LCP/mimic-code/issues/49 alistairewjが2018年11月3日にコメント•►編集

さて、statdできなかったファイル「CHARTEVENTS.csv」:不明なエラーは実際にはPostgreSQL 11のバグです。内部的にはfstat()を呼び出してファイルがディレクトリでないことを確認しますが、残念ながらfstat()はcharteventsのような大きなファイルを処理できない32ビットプログラム。ビルドをWindowsでPostgreSQL 10.5でテストしましたが、このエラーは発生しなかったので、かなり新しいと思います。

最善の回避策は、ファイルを圧縮したままにし(つまり、それらを.csv.gzファイルとして保持し)、7Zipを使用して圧縮ファイルから直接データをロードすることです。テストでは、これはまだ機能するようでした。これを行う方法に関するかなり詳細なチュートリアルがあります: https://mimic.physionet.org/tutorials/install-mimic-locally-windows/

上記の簡単なバージョンでは、.csv.gzファイルを保持し、7ZipバイナリをWindows環境のパスに追加してから、postgres_load_data_7Zip.sqlファイルを呼び出してデータをロードします。すべての後にpostgres_checks.sqlファイルを使用して、すべてのデータを正しくロードしたことを確認できます。

編集:あなたがこの7Zipアプローチを使用している後のエラーのために、なぜそれが読み込まれないのかわかりません。 ADMISSIONS.csv.gzファイルのみを再度ダウンロードして、同じエラーが発生するかどうかを確認してください。たぶん、スクリプトや何かを更新する必要がある7Zipの新しいバージョンがあるかもしれません!

11
亚军吴

Postgres 11で1gbを超えるファイルを操作しようとした後にこのPostgresエラーメッセージをグーグルで検索した他の誰にとっても、上記の@亚军吴の回答が適切であることが確認できます。確かにサイズの問題です。

ただし、@亚军吴や@Lorenとは異なるアプローチを試しました。Postgres11をアンインストールし、安定したバージョンのPostgres 10.7をインストールしただけです。 (ちなみに、私はWindows 10を使用しています。

エラーと出来上がりを引き起こした元のコードを再実行しました。数分後、中くらいのサイズのcsvファイル(約3GB)のデータを新しいテーブルに入力しました。私は最初、@ LorenごとにCSVSplitterを使用しようとしましたが、マシンのストレージスペースが足りなくなるまでは問題なく機能していました。 (ありがとう、戦場5)

私の場合、依存していたPGSQL 11にはバージョン10.7にはなかったものは何もないので、これはこの問題に遭遇した他の誰にとっても良い解決策になると思います。特に最初にこれを投稿してくれたOPに貢献してくれた上記の皆さんに感謝します。でっかい頭痛を治した!

6
logjammin

プログラムを介してファイルをパイプすることで、これを回避できます。たとえば、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、列cおよびdにコピーされます。

ここでのコツは、cmdを単一のコマンドモードで/cを使用して実行し、問題のファイルをtypeに出力するように指示することです。

6

PgAdminとAWSでは、CSVSplitterを使用して1GB未満のファイルに分割しました。ラメ、しかし働いた。 pgAdminインポートは既存のテーブルに追加します。 (ソースファイル内の引用符で囲まれていないテキストによるエラーを回避するために、エスケープ文字を 'から "に変更しました。通常、LibreOfficeで引用符を適用しますが、これらのファイルは大きすぎて開くことができませんでした。)

2
Loren

これはデータベースの問題ではないようですが、psql/pgadminの問題です。回避策は、以前のpsqlバージョンの管理ソフトウェアを使用することです。

  1. 既存のPostgreSQL 11データベースを使用する
  2. PostgreSQL 10のインストールからpsqlまたはpgadminをインストールし、それを使用してファイルをアップロードします(質問に示されているコマンドを使用)

これが同じ問題に遭遇した人を助けることを願っています。

0
user9938203