💭

PostgreSQLでエラーを発生させて終了したい

2020/12/20に公開

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