sql >> データベース >  >> RDS >> PostgreSQL

psql \copymeta-commandでエラーを無視する方法

    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から特定の列のみをコピーします


    1. PostgreSQL 9.1:重複せずに配列内の行を連結する方法、別のテーブルに参加する

    2. MySQL –「Last_Query_Cost」のようなSHOW STATUSを使用して、最後のクエリコストを取得します

    3. PostgreSQLテーブル名を単純に使用することはできません(関係は存在しません)

    4. Mac OS XでPostgreSQLサーバーを起動するにはどうすればよいですか?