2017-02-01 10 views
0

より簡単な方法でWALログからトランザクションを読み取る方法があるかどうかを知りたいと思います。私はバイナリデータではないトランザクションをしたい。私はpg_xlogdumpを使用しますが、私は実際に私は、SQLでの取引をしたい、このpostgresql:WALログからのトランザクションの出力

 
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 

のように見えた結果からトランザクションを取得する方法は考えています。すべてのトランザクションが何であるかを知ることができれば、十分なフィールドの価値が得られます。

+1

生のWALログからSQLを回復することはできません。その理由は彼らが[論理デコード](https://www.postgresql.org/docs/current/static/logicaldecoding-example.html)を発明した理由です。 –

+0

フィールドとともに各トランザクションIDでどのようなトランザクションが発生したかを取得する方法はありますか? ??私はそれを自分でSQLに変換することができます。@ NickBarnes –

答えて

3

修正を引き起こしたSQL文を取得するのに十分な情報がWALファイルにありません。

は基本的に、あなたのサンプルの最初のWALエントリはに変換:ファイル 1663/12411/3455のブロック1では
、284は
WALエントリもそこ書くために、生のデータが含まれているオフセットのインデックスエントリを挿入しますが、 pg_xlogdumpには表示されません。

このWALからわかるのは、インデックスが付いたテーブルにデータが挿入され、テーブルが小さくなっているということです。 この情報はデータファイルの変更を回復するのには十分ですが、そこからSQL文を再構築する方法はありません。要するに

、WALは、データベースへ物理変更、ない論理のものが含まれています。

関連する問題