2017-02-01 4 views
0

Ich möchte wissen, ob es eine Möglichkeit gibt, die Transaktionen aus WAL-Logs auf einfachere Weise zu lesen. Ich möchte die Transaktionen nicht die binären Daten. Früher habe ich pg_xlogdump aber ich habe keine Ahnung, wie aus dem Ergebnis die Transaktionen zu erhalten, die so aussahpostgresql: Drucken von Transaktionen aus WAL-Logs

 
rmgr: Btree  len (rec/tot):  2/ 64, tx:  659, lsn: 0/0172D3C8, prev 0/0172D380, desc: INSERT_LEAF off 284, blkref #0: rel 1663/12411/3455 blk 1 
rmgr: Heap  len (rec/tot):  3/ 171, tx:  659, lsn: 0/0172D408, prev 0/0172D3C8, desc: INSERT off 35, blkref #0: rel 1663/12411/1249 blk 44 
rmgr: Btree  len (rec/tot):  2/ 64, tx:  659, lsn: 0/0172D4B8, prev 0/0172D408, desc: INSERT_LEAF off 91, blkref #0: rel 1663/12411/2658 blk 13 
rmgr: Btree  len (rec/tot):  2/ 64, tx:  659, lsn: 0/0172D4F8, prev 0/0172D4B8, desc: INSERT_LEAF off 309, blkref #0: rel 1663/12411/2659 blk 8 
rmgr: Heap  len (rec/tot):  3/ 193, tx:  659, lsn: 0/0172D538, prev 0/0172D4F8, desc: INSERT off 25, blkref #0: rel 1663/12411/2610 blk 2 
rmgr: Btree  len (rec/tot):  2/ 64, tx:  659, lsn: 0/0172D600, prev 0/0172D538, desc: INSERT_LEAF off 121, blkref #0: rel 1663/12411/2678 blk 1 
rmgr: Btree  len (rec/tot):  2/ 64, tx:  659, lsn: 0/0172D640, prev 0/0172D600, desc: INSERT_LEAF off 122, blkref #0: rel 1663/12411/2679 blk 1 
rmgr: Heap  len (rec/tot):  3/ 1786, tx:  659, lsn: 0/0172D680, prev 0/0172D640, desc: INSERT off 3, blkref #0: rel 1663/12411/2606 blk 0 FPW 
rmgr: Btree  len (rec/tot):  2/ 209, tx:  659, lsn: 0/0172DD80, prev 0/0172D680, desc: INSERT_LEAF off 2, blkref #0: rel 1663/12411/2664 blk 1 FPW 
rmgr: Btree  len (rec/tot):  2/ 153, tx:  659, lsn: 0/0172DE58, prev 0/0172DD80, desc: INSERT_LEAF off 3, blkref #0: rel 1663/12411/2665 blk 1 FPW 
rmgr: Btree  len (rec/tot):  2/ 153, tx:  659, lsn: 0/0172DEF8, prev 0/0172DE58, desc: INSERT_LEAF off 1, blkref #0: rel 1663/12411/2666 blk 1 FPW 
rmgr: Btree  len (rec/tot):  2/ 153, tx:  659, lsn: 0/0172DF98, prev 0/0172DEF8, desc: INSERT_LEAF off 3, blkref #0: rel 1663/12411/2667 blk 1 FPW 
rmgr: Heap  len (rec/tot):  3/ 80, tx:  659, lsn: 0/0172E050, prev 0/0172DF98, desc: INSERT off 79, blkref #0: rel 1663/12411/2608 blk 53 
rmgr: Btree  len (rec/tot):  2/ 72, tx:  659, lsn: 0/0172E0A0, prev 0/0172E050, desc: INSERT_LEAF off 235, blkref #0: rel 1663/12411/2673 blk 38 
rmgr: Btree  len (rec/tot):  2/ 72, tx:  659, lsn: 0/0172E0E8, prev 0/0172E0A0, desc: INSERT_LEAF off 113, blkref #0: rel 1663/12411/2674 blk 44 
rmgr: Heap  len (rec/tot):  3/ 80, tx:  659, lsn: 0/0172E130, prev 0/0172E0E8, desc: INSERT off 80, blkref #0: rel 1663/12411/2608 blk 53 
rmgr: Btree  len (rec/tot):  2/ 72, tx:  659, lsn: 0/0172E180, prev 0/0172E130, desc: INSERT_LEAF off 231, blkref #0: rel 1663/12411/2673 blk 38 
rmgr: Btree  len (rec/tot):  2/ 72, tx:  659, lsn: 0/0172E1C8, prev 0/0172E180, desc: INSERT_LEAF off 109, blkref #0: rel 1663/12411/2674 blk 23 

Eigentlich mag ich die Transaktionen in SQL. Wenn ich weiß, was jede Transaktion ist und die Werte der Felder, die ausreichen werden.

+1

Sie können SQL von rohen WAL-Protokollen nicht wiederherstellen; Deshalb haben sie erfunden [logische Entschlüsselung] (https://www.postgresql.org/docs/current/static/logicaldecoding-example.html) –

+0

Gibt es eine Möglichkeit zu erhalten, welche Transaktion mit jeder Transaktions-ID zusammen mit den Feldern passiert ist. ?? Ich kann das zu SQL selbst umwandeln. @ NickBarnes –

Antwort

3

In den WAL-Dateien sind nicht genügend Informationen verfügbar, um die SQL-Anweisungen abzurufen, die die Änderungen verursacht haben.

Grundsätzlich übersetzt der erste WAL Eintrag in Ihrer Probe:
In Block 1 von Datei 1663/12411/3455, an einen Indexeintrag einfügen Offset 284.
Der WAL Eintrag die Rohdaten enthält auch dort zu schreiben, aber pg_xlogdump zeigt sie nicht an.

Also alles, was ich von dieser WAL sehen kann, ist, dass etwas Daten in eine Tabelle eingefügt hat, die einen Index darauf hatte, und die Tabelle war wahrscheinlich klein. Diese Information reicht aus, um die Änderungen an den Datendateien wiederherzustellen, aber es gibt keine Möglichkeit, die SQL-Anweisung daraus zu rekonstruieren.

Kurz gesagt, enthält der WAL die physikalischen Änderungen an die Datenbank, nicht die logisch diejenigen.

Verwandte Themen