0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PL/pgSQLのリターンコードの制御方法

Posted at

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のリターンコードが参照できません。ご注意ください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?