PL/pgSQL/エラー時のメッセージ出力
の編集
Top
/
PL
/
pgSQL
/
エラー時のメッセージ出力
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
PostgreSQL/template0とtemplate1の違いについて
---- ⌣ ''[[PL/pgSQL入門ページに戻る>PL/pgSQL入門]]'' ---- * エラー時のメッセージ出力・RAISE EXCEPTION [#rbd348b0] 前回の記事「[[ターミナルにメッセージ出力>PL/pgSQL/ターミナルにメッセージを表示する]]」では、levelがEXCEPTIONを除くRAISEのサンプルおよび動作を紹介しました。~ 今回は、EXCEPTIONのサンプルおよび動作を紹介します。~ (先に結論を書きますと、EXCEPTIONの場合、ROLLBACKされます。) #contents #htmlinsertpcsp(db-top.html,db-sp.html) * RAISEの動作確認 [#i869e92d] RAISEの構文について以下に記します。~ 前回の記事のraise_sample.sqlを少々改造し、データをINSERTするようにします。~ ** テスト用テーブルの作成 [#jd6a96e4] #ref(t1.sql) CREATE TABLE t1 ( i int ,t text ); ** EXCEPTIONを除いたRAISEのサンプルおよび実行 [#af657599] 以下のコマンドで、上記のテーブルを作成しました。 $ psql -U sakura sakuradb -f t1.sql CREATE TABLE EXCEPTIONを除いたサンプルソースは以下のようになります。~ #ref(raise1.sql) CREATE OR REPLACE FUNCTION raise1() RETURNS void AS $$ DECLARE foo text := 'foo'; bar int := 123; BEGIN INSERT INTO t1 VALUES(1,'foo'),(2,'bar'),(3,'hoge'); RAISE DEBUG 'DEBUG RAISE MESSAGE'; RAISE LOG 'LOG RAISE MESSAGE'; RAISE INFO 'INFO RAISE MESSAGE %', foo; RAISE NOTICE 'NOTICE RAISE MESSAGE %,%', foo, bar; RAISE WARNING 'WARNING RAISE MESSAGE'; END $$ LANGUAGE plpgsql ; raise1()の登録および実行してみます。~ 本サンプルは上記に記したt1テーブルがすでに作成されていることが前提です。 + データベースに接続 $ psql -U sakura sakuradb psql (9.3.14) Type "help" for help. + t1テーブルに何も無いことを確認しています。 sakuradb=# select count(*) from t1; count ------- 0 (1 row) + raise1.sqlを登録しています。 sakuradb=# \i raise1.sql CREATE FUNCTION +raise1()ファンクションを実行します。 sakuradb=# select raise1(); INFO: INFO RAISE MESSAGE foo NOTICE: NOTICE RAISE MESSAGE foo,123 WARNING: WARNING RAISE MESSAGE raise1 -------- (1 row) +t1テーブルの内容を確認します。 sakuradb=# select * from t1; i | t ---+------ 1 | foo 2 | bar 3 | hoge (3 rows) 上記の実行結果の通り、3件INSERTされているのが確認できます。 ** RAISE EXCEPTIONのサンプルおよび実行 [#v8226d09] 本題となるEXCEPTIONの動作確認を行います。~ 本ファンクションは、上記と同様にt1テーブルが作成されていることが前提です。 #ref(raise_exp.sql) CREATE OR REPLACE FUNCTION raise_exp() RETURNS void AS $$ DECLARE BEGIN INSERT INTO t1 VALUES(1,'exp_foo'),(2,'exp_bar'),(3,'exp_hoge'); RAISE EXCEPTION 'EXCEPTION RAISE MESSAGE'; END $$ LANGUAGE plpgsql ; 上記の通り、RAISEのレベルにEXCEPTIONを指定しています。~ 以下に登録および実行結果を記します。 +raise_exp.sqlを登録します。 sakuradb=# \i raise_exp.sql CREATE FUNCTION +t1テーブルのレコードをすべて削除します。 sakuradb=# delete from t1; DELETE 3 sakuradb=# select * from t1; i | t ---+--- (0 rows) +raise_exp()を実行します。 ERROR: メッセージで表示されているのが確認できます。 sakuradb=# select raise_exp(); ERROR: EXCEPTION RAISE MESSAGE +t1テーブルの内容を確認します。~ INSERTされていないことが確認できます。 sakuradb=# select * from t1; i | t ---+--- (0 rows) 以上の結果の通り、デフォルトであるオートコミット状態でRAISE EXCEPTIONが実行されると''ROLLBACK''されているのが確認できます。 ** 後作業 [#l411e1e7] 本記事で作成した、raise1(), raise_exp(), t1 をDROPします。 sakuradb=# drop function raise1(); DROP FUNCTION sakuradb=# drop function raise_exp(); DROP FUNCTION sakuradb=# drop table t1; DROP TABLE * まとめ [#r9791857] + RAISE EXCEPTION するとROLLBACKされる + EXCEPTION以外のレベルを指定すると、COMMITされている 以上、RAISE EXCEPTION についての記事でした。 ---- ⌣ ''[[PL/pgSQL入門ページに戻る>PL/pgSQL入門]]'' #htmlinsertpcsp(db-btm.html,db-sp.html)
タイムスタンプを変更しない
---- ⌣ ''[[PL/pgSQL入門ページに戻る>PL/pgSQL入門]]'' ---- * エラー時のメッセージ出力・RAISE EXCEPTION [#rbd348b0] 前回の記事「[[ターミナルにメッセージ出力>PL/pgSQL/ターミナルにメッセージを表示する]]」では、levelがEXCEPTIONを除くRAISEのサンプルおよび動作を紹介しました。~ 今回は、EXCEPTIONのサンプルおよび動作を紹介します。~ (先に結論を書きますと、EXCEPTIONの場合、ROLLBACKされます。) #contents #htmlinsertpcsp(db-top.html,db-sp.html) * RAISEの動作確認 [#i869e92d] RAISEの構文について以下に記します。~ 前回の記事のraise_sample.sqlを少々改造し、データをINSERTするようにします。~ ** テスト用テーブルの作成 [#jd6a96e4] #ref(t1.sql) CREATE TABLE t1 ( i int ,t text ); ** EXCEPTIONを除いたRAISEのサンプルおよび実行 [#af657599] 以下のコマンドで、上記のテーブルを作成しました。 $ psql -U sakura sakuradb -f t1.sql CREATE TABLE EXCEPTIONを除いたサンプルソースは以下のようになります。~ #ref(raise1.sql) CREATE OR REPLACE FUNCTION raise1() RETURNS void AS $$ DECLARE foo text := 'foo'; bar int := 123; BEGIN INSERT INTO t1 VALUES(1,'foo'),(2,'bar'),(3,'hoge'); RAISE DEBUG 'DEBUG RAISE MESSAGE'; RAISE LOG 'LOG RAISE MESSAGE'; RAISE INFO 'INFO RAISE MESSAGE %', foo; RAISE NOTICE 'NOTICE RAISE MESSAGE %,%', foo, bar; RAISE WARNING 'WARNING RAISE MESSAGE'; END $$ LANGUAGE plpgsql ; raise1()の登録および実行してみます。~ 本サンプルは上記に記したt1テーブルがすでに作成されていることが前提です。 + データベースに接続 $ psql -U sakura sakuradb psql (9.3.14) Type "help" for help. + t1テーブルに何も無いことを確認しています。 sakuradb=# select count(*) from t1; count ------- 0 (1 row) + raise1.sqlを登録しています。 sakuradb=# \i raise1.sql CREATE FUNCTION +raise1()ファンクションを実行します。 sakuradb=# select raise1(); INFO: INFO RAISE MESSAGE foo NOTICE: NOTICE RAISE MESSAGE foo,123 WARNING: WARNING RAISE MESSAGE raise1 -------- (1 row) +t1テーブルの内容を確認します。 sakuradb=# select * from t1; i | t ---+------ 1 | foo 2 | bar 3 | hoge (3 rows) 上記の実行結果の通り、3件INSERTされているのが確認できます。 ** RAISE EXCEPTIONのサンプルおよび実行 [#v8226d09] 本題となるEXCEPTIONの動作確認を行います。~ 本ファンクションは、上記と同様にt1テーブルが作成されていることが前提です。 #ref(raise_exp.sql) CREATE OR REPLACE FUNCTION raise_exp() RETURNS void AS $$ DECLARE BEGIN INSERT INTO t1 VALUES(1,'exp_foo'),(2,'exp_bar'),(3,'exp_hoge'); RAISE EXCEPTION 'EXCEPTION RAISE MESSAGE'; END $$ LANGUAGE plpgsql ; 上記の通り、RAISEのレベルにEXCEPTIONを指定しています。~ 以下に登録および実行結果を記します。 +raise_exp.sqlを登録します。 sakuradb=# \i raise_exp.sql CREATE FUNCTION +t1テーブルのレコードをすべて削除します。 sakuradb=# delete from t1; DELETE 3 sakuradb=# select * from t1; i | t ---+--- (0 rows) +raise_exp()を実行します。 ERROR: メッセージで表示されているのが確認できます。 sakuradb=# select raise_exp(); ERROR: EXCEPTION RAISE MESSAGE +t1テーブルの内容を確認します。~ INSERTされていないことが確認できます。 sakuradb=# select * from t1; i | t ---+--- (0 rows) 以上の結果の通り、デフォルトであるオートコミット状態でRAISE EXCEPTIONが実行されると''ROLLBACK''されているのが確認できます。 ** 後作業 [#l411e1e7] 本記事で作成した、raise1(), raise_exp(), t1 をDROPします。 sakuradb=# drop function raise1(); DROP FUNCTION sakuradb=# drop function raise_exp(); DROP FUNCTION sakuradb=# drop table t1; DROP TABLE * まとめ [#r9791857] + RAISE EXCEPTION するとROLLBACKされる + EXCEPTION以外のレベルを指定すると、COMMITされている 以上、RAISE EXCEPTION についての記事でした。 ---- ⌣ ''[[PL/pgSQL入門ページに戻る>PL/pgSQL入門]]'' #htmlinsertpcsp(db-btm.html,db-sp.html)
テキスト整形のルールを表示する
添付ファイル:
raise1.sql
303件
[
詳細
]
raise_exp.sql
503件
[
詳細
]
t1.sql
440件
[
詳細
]