【PostgreSQL】大量のSQLを流し込む時に便利な-e -v ON_ERROR_STOP=1

  • 2025年10月15日
  • SQL

 PostgreSQLで大きめのSQLファイルを一気に流し込む時、単に psql -f で実行するとどこで失敗したのかが分からなかったり、途中で止まらずに延々とエラーを吐き続けてしまうことがあります。正常に終わったと思ったら正常でなかったなんてこともあります。流し込むSQLが大きく実行に時間がかかるとげんなりします。そういった事態の対策に便利なのがオプションの -e と -v ON_ERROR_STOP=1 です。

 実行例は次です。

docker compose exec -T db \ # Docker上のPostgreSQLを持つコンテナに
  psql -U postgres -d tgtdb \ # postgres ユーザーで tgtdb に大して
  -e -v ON_ERROR_STOP=1 \ # -e -v ON_ERROR_STOP=1 付きで
  -f ./tmp/tgtdb.sql # ./tmp/tgtdb.sql を流し込む

 このようにすると -e によって実行中のSQLが標準出力にエコーされ、どのSQLでエラーが起きたのかが明確になります。加えて ON_ERROR_STOP=1 によって1つでもエラーが発生した時点で処理が止まります。
こうすると完璧に正常に実行完了しなかったことが即座に分かり、エラー原因の調査もやりやすいです。

 こんな感じですぐやり直せると、とりあえず実行して失敗したら直してもう一回実行して…という作業サイクルを回しやすいです。データベース移行などの単にSQLをそのまま実行すると失敗が予想されるような作業時には特に便利です。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG