💭
PostgreSQLでエラーを発生させて終了したい
PostgreSQLで入力チェックなどをしたときに自前でエラーにする方法が分かりませんでした。
(psqlの終了コードの正常、異常で呼び出し元の処理を振り分けるためです)
わざと間違える
SELECT 1/0;
$ psql -v ON_ERROR_STOP=true -f test.sql
psql:test.sql:1: ERROR: division by zero
$ echo $?
3
RAISEを使う
DO $$ BEGIN RAISE EXCEPTION 'error message'; END $$;
$ psql -v ON_ERROR_STOP=true -f test.sql
psql:test.sql:1: ERROR: error message
CONTEXT: PL/pgSQL function inline_code_block line 1 at RAISE
$ echo $?
3
PL/pgSQLのRAISE文を呼び出せばいいんですが、サンプルはCREATE FUNCTIONで定義するものばかりでDOコマンドでPL/pgSQLの無名ブロックが使えることが分かりませんでした。
Discussion