PostgreSQLデータベースと次のpsql
コマンドでcopy
を使用しています:
\COPY isa (np1, np2, sentence) FROM 'c:\Downloads\isa.txt' WITH DELIMITER '|'
私は得ます:
ERROR: extra data after last expected column
エラーのある行をスキップするにはどうすればよいですか?
Postgres 9.5までのコマンド全体をスキップせずにエラーをスキップすることはできません。現在、洗練されたエラー処理はありません。
\copy
はSQLの単なるラッパーです COPY
結果をpsql経由でチャネル化します。 COPY
のマニュアル:
COPY
は最初のエラーで操作を停止します。これはCOPY TO
のイベントで問題を引き起こすことはありませんが、ターゲットテーブルは、COPY FROM
の以前の行を既に受け取っています。これらの行は表示またはアクセスできませんが、ディスク領域を占有します。大規模なコピー操作で障害が発生した場合、これはかなりの量の無駄なディスク領域になる可能性があります。VACUUM
を呼び出して、無駄なスペースを回復することができます。
大胆な強調鉱山。そして:
COPY FROM
は、入力ファイルのいずれかの行に予想よりも多いまたは少ない列が含まれている場合にエラーを発生させます。
Postgres 9.0ではCOPY
にエラーログを追加する試み がありましたが、Aster Dataが先頭に立っていましたが、コミットされていませんでした。この会社は後にTeradataに買収されたので、彼らがまだプロジェクトを進めているとは思えません。
代わりに入力ファイルを修正してください。
入力ファイルに1つ以上の追加の列があり、ファイルがその他の整合性がある場合、テーブルにダミー列を追加することができますisa
およびそれらを後でドロップします。または(本番テーブルではよりクリーン)一時ステージングテーブルにインポートし、そこからターゲットテーブルINSERT
にisa
選択した列(または式)をインポートします。
詳細な手順と関連する回答: