pg_filedumpを使ってみる
pg_filedumpというファイル(heap、index、control file)の中身を読みやすく出力してくれるツールがあることを知ったので試してみた。
http://sources.redhat.com/rhdb/utilities.html
ダウンロードしてPostgreSQLファイルのソースのcontribディレクトリに展開してmakeすると簡単にインストールできる。
tar xvf pg_filedump-8.3.tar cd pg_filedump-8.3 make -f Makefile.contrib make -f Makefile.contrib install
pg_filedumpコマンドが実行できればインストール成功。
試してみる。
まず新規にテーブルを作りそのファイル名を取得する。
test=# create table hoge (a int, b varchar(10)); CREATE TABLE test=# insert into hoge (a, b) values (1, 'test'); INSERT 0 1 test=# insert into hoge (a, b) values (2, 'aaa'); INSERT 0 1 test=# checkpoint; CHECKPOINT test=# select relfilenode from pg_class where relname = 'hoge'; relfilenode ------------- 16466 (1 row)
データをファイルに書かせるために明示的にcheckpointしておく。
次にファイル名を指定してpg_filedumpを実行する。
$ pg_filedump -f /usr/local/pgsql/data/base/16384/16466
でた。
******************************************************************* * PostgreSQL File/Block Formatted Dump Utility - Version 8.3.0 * * File: /usr/local/pgsql/data/base/16384/16466 * Options used: -f * * Dump created on: Wed Feb 4 08:18:55 2009 ******************************************************************* Block 0 ******************************************************** <Header> ----- Block Offset: 0x00000000 Offsets: Lower 32 (0x0020) Block: Size 8192 Version 4 Upper 8124 (0x1fbc) LSN: logid 0 recoff 0x005d2640 Special 8192 (0x2000) Items: 2 Free Space: 8092 TLI: 0x0001 Prune XID: 0x00000000 Flags: 0x0000 () Length (including item array): 32 0000: 00000000 40265d00 01000000 2000bc1f ....@&]..... ... 0010: 00200420 00000000 dc9f4200 bc9f4000 . . ......B...@. <Data> ------ Item 1 -- Length: 33 Offset: 8156 (0x1fdc) Flags: NORMAL 1fdc: 3d020000 00000000 00000000 00000000 =............... 1fec: 01000200 02081800 01000000 0b746573 .............tes 1ffc: 74 t Item 2 -- Length: 32 Offset: 8124 (0x1fbc) Flags: NORMAL 1fbc: 3e020000 00000000 00000000 00000000 >............... 1fcc: 02000200 02081800 02000000 09616161 .............aaa *** End of File Encountered. Last Block Read: 0 ***
ItemのOffsetを見るとItemが後ろから追加されているのがわかる。データも見える。
内部を知るのに便利そう。