私は最近、PostgreSQLを使用するアプリケーションを継承し、データベースにレコードを保存する際の問題を解決しています。PostgreSQLログのトランザクションをどのようにトラッキングできますか?
log_line_prefix
に特別な値%x
を含めることで、PostgreSQLでトランザクションIDをログに記録することができます。しかし、私が気づいたのは、トランザクション内で発生する最初のステートメントは常にゼロで記録されるということです。
私は
begin;
insert into numbers (1);
insert into numbers (2);
commit;
、psqlで次の操作を実行した場合、クエリログには、次のエントリが含まれます。
2016-09-20 03:07:40 UTC 0 LOG: statement: begin;
2016-09-20 03:07:53 UTC 0 LOG: statement: insert into numbers values (1);
2016-09-20 03:07:58 UTC 689 LOG: statement: insert into numbers values (2);
2016-09-20 03:08:03 UTC 689 LOG: statement: commit;
私のログ形式は、トランザクションID、%t %x
とあなたが見ることができるようです最初の挿入文は0ですが、2番目の挿入を実行すると689に変わります。
トランザクションを開始した後、理由を説明できる人は誰ですか?PostgreSQLは最初の文に正しいトランザクションIDを記録していませんか?または、これを間違って実行している場合は、ログファイルを調べることで、どのクエリが単一のトランザクションの一部であるかを識別する信頼性の高い方法がありますか?