象と戯れ

 | 

2009-12-30

TupleTableSlotの内容を文字列で出力するには

23:59 | TupleTableSlotの内容を文字列で出力するには - 象と戯れ を含むブックマーク はてなブックマーク - TupleTableSlotの内容を文字列で出力するには - 象と戯れ

PGSQL Development Hack #1

TupleTableSlotは行を抽象化したもので、エグゼキュータで主に使われます。実体はヒープの行そのものであったりメモリ上に作成された仮想タプル(VirtualTuple)だったりするので、中身について知りたがらない方が身のためです。

しかし開発中にSlotの中身を文字列として確認したいことはよくあります。当然printf()などでは太刀打ちできません。

そこで役に立つのがdebugtup()。backend/access/common/printtup.cにあります。

TupleTableSlot *slot;

slot = execProcNode(outperPlan);
...
debugtup(slot, NULL);
...

などとやると、サーバの標準出力にHuman Readableな形で出力されます。

HackをHackする

実際にこのテクニックが役立つのはもしかしたらGDBでのデバッグ中かもしれません。

(gdb) call debugtup(slot, 0)

とすればステップ実行中にslotの内容が確認できるのでとても便利です。行末のセミコロンが要らないことに注意しましょう。

同じくprinttup.cにあるprinttup()を、レシーバにNULLを指定してうっかり呼び出してしまうとサーバプロセスが死ぬので気をつけてください。


...(続く?)

 |