2016-09-20 2 views
6

Ich habe kürzlich eine Anwendung geerbt, die PostgreSQL verwendet, und ich habe Probleme mit dem Speichern von Datensätzen in der Datenbank behoben.Wie verfolge ich Transaktionen im PostgreSQL-Protokoll?

Ich weiß, dass PostgreSQL mir erlaubt, die Transaktions-ID in das Protokoll aufzunehmen, indem Sie den speziellen Wert von %x in der log_line_prefix. Was ich jedoch bemerkt habe, ist, dass die erste Anweisung, die innerhalb einer Transaktion auftritt, immer mit einer Null geloggt wird.

Wenn ich die folgenden Operationen in psql ausführen,

begin; 
insert into numbers (1); 
insert into numbers (2); 
commit; 

das Abfrageprotokoll werden die folgenden Einträge enthalten:

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; 

Mein Log-Format ist %t %x und wie Sie sehen können, die Transaktions-ID für die erste Insert-Anweisung ist 0, aber es ändert sich zu 689, wenn ich die zweite Einfügung ausführe.

Kann jemand erklären, warum PostgreSQL nach dem Start einer Transaktion nicht die richtige Transaktions-ID auf der ersten Anweisung protokolliert? Oder, wenn ich das nur falsch mache, gibt es eine zuverlässigere Möglichkeit, anhand der Protokolldatei herauszufinden, welche Abfragen Teil einer einzelnen Transaktion waren?

Antwort

8

Die Transaktions-ID wird nach dem Start der Anweisung zugewiesen, sodass log_statement sie nicht erfasst. BEGIN weist keine Transaktions-ID zu, sie wird bis zum ersten Schreibvorgang verzögert.

Verwenden Sie stattdessen das virtuelle TXID, das sofort zugewiesen wird. Der Platzhalter ist %v. Diese werden sofort zugewiesen, sind jedoch nicht persistent und sind backendlokal.

Ich finde es nützlich, beide zu protokollieren. Die txid, weil es bis zu xmin und xmax Systemspalten Inhalt usw. entspricht; das vtxid, um mir zu helfen, Operationen in Transaktionen zu gruppieren.

Verwandte Themen