いくつかの値を保存するために、作成、変更、および削除されたデータで起動されるトリガーを使用して、監査ログを実装したいと考えています。これらのトリガーは、変更を行い、Web アプリケーションによって管理されるユーザー ID を使用できる必要があります。このデータを提供するアイデアはいくつかありますが、トリガーの実行コンテキストが何であるかを完全には理解していないようです。PostgreSQL ドキュメントの Overview of Trigger Behaviorなどを読みましたが、私の質問には答えがないようです。
私が知りたいのは、実行中の 1 つのトランザクションを含むクライアント セッションとトリガーの実行の間の相互作用と、両方の有効期間、およびそれらが相互にどのように依存しているかです。私の理解では、トリガーは、トリガーの実行につながるイベントを作成したクライアント セッションとは別に、データベース内で実行されます。あれは正しいですか?つまり、トリガーとその処理はクライアント要求のパフォーマンスに影響を与えず、クライアントはいつでもセッションを閉じることができます。両方が独立している場合、トリガーはクライアントがトランザクションをロールバックしたことをどのように通知されるでしょうか? これは、論理的には、データがまったく変更されなかったことを意味するでしょうか? または、トリガーは独立して実行されるため、トランザクションのコミット後にのみ実行されますか?
または、トリガーの実行につながるイベントを作成したクライアント セッション内でトリガーが非同期に実行されますか? これは、クライアントが何らかの理由でセッションを閉じると、トリガーも中止されることを意味します。それらの変更はクライアントのトランザクションに直接バインドされ、ロールバックも可能です。
別の質問で何をしたいのかを知るには、動作を理解する必要があります。
ご意見ありがとうございます。