Postgres 14までのコマンド全体をスキップせずにエラーをスキップすることはできません。現在、これ以上高度なエラー処理はありません。
\ copy
SQL COPY
の単なるラッパーです そのチャネルはpsqlを介して結果を導きます。 COPY
のマニュアル :
コピーコード> 最初のエラーで動作を停止します。
これにより、COPY TO
が発生した場合に問題が発生することはありません。 、ただし、ターゲットテーブルはすでにCOPY FROM
の以前の行を受信しています。 。これらの行は表示またはアクセスできませんが、ディスク領域を占有します。大規模なコピー操作で障害が発生した場合、これはかなりの量の無駄なディスクスペースになる可能性があります。VACUUM
を呼び出すことをお勧めします 無駄なスペースを取り戻すため。
大胆な強調鉱山。そして:
COPY FROM
入力ファイルのいずれかの行に予想よりも多いまたは少ない列が含まれている場合、エラーが発生します。
コピーコード> データをインポート/エクスポートする非常に高速な方法です。洗練されたチェックとエラー処理はそれを遅くします。
COPY
にエラーログを追加しようとしました Postgres 9.0では、コミットされませんでした。
解決策
代わりに入力ファイルを修正してください。
入力ファイルに1つ以上の追加の列があり、ファイルがそれ以外の場合は一貫している 、テーブルにダミー列を追加できます isa
後でそれらをドロップします。または(本番テーブルでよりクリーンに)一時ステージングテーブルにインポートして INSERT
選択した列(または式)をターゲットテーブルに isa
そこから。
詳細な手順を含む関連する回答:
- PostgresのCSVファイルの値で選択した行を更新するにはどうすればよいですか?
- COPYコマンド:csvから特定の列のみをコピーします