6
我最近繼承了一個使用PostgreSQL的應用程序,並且一直在解決與在數據庫中保存記錄有關的問題。如何跟蹤PostgreSQL日誌中的事務?
我知道PostgreSQL允許我通過在log_line_prefix
中包含特殊值%x
來記錄交易ID。但是,我注意到,事務中發生的第一條語句總是以零記錄。
如果我執行PSQL以下操作,
begin;
insert into numbers (1);
insert into numbers (2);
commit;
查詢日誌將包含以下項目:
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;
我的日誌格式%t %x
,正如你所看到的,事務ID對於第一個插入語句是0,但是當我執行第二個插入時它變爲689。
任何人都可以解釋爲什麼開始一個事務後PostgreSQL不會在第一條語句上記錄正確的事務ID嗎?或者,如果我只是做了這個錯誤,是否有一種更可靠的方式通過查看日誌文件來確定哪些查詢是單個事務的一部分?