PL/pgSQLのリターンコードは、PL/SQLとは違い任意に設定することはできません。
この問題に対する対処方法を説明します。
1.結論
Excceptionの場合にリターンコード3が設定されるように設定し、処理結果NGの場合にExcception発生させます。
2.環境
・OS:Windows10
・コンソール:コマンドプロンプト
・DB:PostgreSQL 14.7
3.実行例
SQLファイル
exception01.sql
SET CLIENT_ENCODING TO 'UTF8';
\set ON_ERROR_STOP ON
DO $$
declare
resultFlag boolean;
begin
RAISE NOTICE '処理結果NGの場合.';
resultFlag = FALSE;
if resultFlag then
RAISE NOTICE '正常終了。';
else
RAISE EXCEPTION '異常終了。';
end if;
end;
$$ language plpgsql;
【1】\set ON_ERROR_STOP ON
エラー発生時に処理を中断するための設定。
ONにするとException時にリターンコード3になる
【2】RAISE EXCEPTION '異常終了。';
任意にExceptionを発生させる。
コマンド
(psql -U postgres -f exception01.sql 2>&1) > foo.log
echo %errorlevel%
実行結果(コンソール)
リターンコード3が出力されます(Exceptionが発生しない場合はリターンコードは0になります)。
3
実行結果(出力ファイル「foo.log」)
SET
psql:exception01.sql:19: NOTICE: 処理結果NGの場合.
psql:exception01.sql:19: ERROR: 異常終了。
CONTEXT: PL/pgSQL関数inline_code_blockの12行目 - RAISE
4.補足
「こちらの記事」の方法を使用すると、パイプ先のコマンドの結果がリターンコードの参照先になり、PL/pgSQLのリターンコードが参照できません。ご注意ください。