2017-10-04 8 views
3

私はpostgresの中に、検索例外ハンドラを持っているそれは私がすべての機能のために、この効率的であることを行う場合postgresでグローバル例外ハンドラを実行する方法は?

DECLARE 
    text_var1 text; 
    text_var2 text; 
    text_var3 text; 
BEGIN 
    -- some processing which might cause an exception 
    ... 
EXCEPTION WHEN OTHERS THEN 
    GET STACKED DIAGNOSTICS text_var1 = MESSAGE_TEXT, 
          text_var2 = PG_EXCEPTION_DETAIL, 
          text_var3 = PG_EXCEPTION_HINT; 
-- call a function which log all this variable perform log_function (text_var1 ,text_var2 , text_var3); 
END; 

を追加すると言いますか?

この方法でパフォーマンスが不足していますか?

すべての関数にグローバル例外ハンドラを使用することはできませんか?このアプローチでは、すべての関数の例外ハンドラを追加しました。

これを変数に保存し、ログを保存します。そのためのグローバルエラーハンドラはありますか?

編集

私はテーブルにはpostgresに来て、すべての例外をログに記録する必要があります。私はこの手順に従っています。表に、ログたより

1)(すべての機能に積層ブロックをGET iが20の機能を持っている場合、私はすべての機能では、このブロックを書く)

2)。

何私が欲しいのは、私はPL/pgSQLのブロックにEXCEPTION句を使用して、すべての機能

+1

はい - ログにエラーを記録し、それをテーブルにインポートするためにcsvログフォーマットを使用できます - これはすべての例外をキャッチする意味のある方法だと思います。 –

答えて

1

ためのpostgresに積層例外ブロックをGET書かないですることがあるように、postgresののグローバル例外ハンドラのためのメカニズムがあるべきである持っています負のパフォーマンスへの影響。 “のチップ”をthe documentation of error trappingに表示してください。

PL/pgSQL関数内のすべてのトップレベル例外を自動的に処理する方法はありません。

データベース機能ではなく、アプリケーションからのエラーを記録することをお勧めします。 1つは、トランザクションがロールバックされると、ログはなくなります。

+0

そのコードは例外が現在どのように処理されているかのサンプルです。現在のプロセスでは、このブロックをすべての関数に書き込む必要があります。私たちはポストグルのどのグローバルハンドラによってもそれを行うことができますか? –

+0

編集セクションでさらに情報と使用例を追加しました。 –

関連する問題