エラーが発生した後にトランザクションを自動的にロールバックするために、PostgreSQLストアドプロシージャに例外処理を追加します。PostgreSQLで例外をキャッチした後に呼び出し関数にエラーの詳細を返す
私の問題は、一度例外を捕まえたら、エラーの詳細をlibpqを使う呼び出し側のCプログラムに返すことができないということです。
重大度、SQLSTATE、プライマリ、詳細およびヒントはすべてnullです。例外をキャッチした後にこれらを返す方法はありますか?
これらの値を収集するために使用するlibpq関数はPQresultErrorField()です。
正確に。おそらくOPに2つ以上の接続を持つアプリケーションがあり、2フェーズコミットが必要ですか? – wildplasser
それを詳しく教えていただけますか?しかし、カーソルを返すプロシージャを呼び出すと、まったく同じことが仮定されていました。繰り返し実行したいときに、例外をトリガします。これは私が得るものです。 "エラー:現在のトランザクションは中断され、トランザクションブロック "。だから、私が理解していることから、ロールバックするために私の手続きで例外をキャッチしなければならない。私が間違っている? –
良い点。すべてがロールバックされ、何かをクリーンアップしようとしても使用されません。ただし、ロールバックされないdblink呼び出しのようなまれな例外があります。このような場合にOPが必要とするのは、例外ブロックの最後に「RAISE;」と呼ぶことです。私はそれに応じて私の答えを修正しました。 –