ON_ERROR_STOP=1

簡易的なバッチ処理を実装するにあたり、
バッチスクリプトからpsqlをつかってSQLを実行するって処理がよくある。

バッチスクリプトにNativeなSQLを記載したくないから、
外出しのSQLファイルに記載してpsql実行って処理をよくやるが、
注意しなくてはいけない点がある。

psqlコマンドの後でERRORLEVEL判定しても
SQLファイル内のエラー(例えばシンタックスエラー等)は拾えないのだ。

バッチスクリプト上にオプションで-c をつけてSQLを書いた場合では
シンタックスエラーの際にはERRORLEVELが拾えるのだが、
SQLファイルにしたとたんに、どんなおかしなSQLでも
ERRORLEVEL=0となり、エラーが拾えなくなる。

何も知らないまま、スクリプトをどんどん執筆して、
ERRORLEVEL判定しているからエラーは拾えると思っていたが、
このままではSQLエラーが起きても正常終了として扱われてしまう。

解決策としてオプション機能がある。
psqlのオプションに 「ON_ERROR_STOP=1」と記載しておけば、
SQLファイル内でエラーが発生した際に、ERRORLEVELが0以外で
返却されるようになる。

こういう話は知っているか知らないかだけの問題なので、
ここに記す。