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以外で
返却されるようになる。
こういう話は知っているか知らないかだけの問題なので、
ここに記す。