btree index (17)
_bt_mkscankey_nodata
IndexTupleを比較するためのScanKey構造体を作成する。データを比較するための関数が設定されるが、比較するデータは設定されない。この関数で作成されたScanKeyはIndexTupleをソートするために使用される。
_bt_freeskey
_bt_mkscankeyや_bt_mkscankey_nodataで作成したScanKeyのメモリを開放する。(pfreeしているだけ)
_bt_freestack
_bt_searchが作成したBTStack(leaf pageからroot pageにたどりつくためのリンクが登録されている)のメモリを開放する。
_bt_load
Tupleをソートしてからbtree indexを構築するとき、Spool(IndexTupleがソートされて保存されている)から順にIndexTupleを取り出してIndexに登録する。Spoolが2つある場合は、Marge Joinのように2つのSpoolのIndexTupleを比較して小さいIndexTupleから登録していく。
全てのIndexTupleを登録したら、_bt_uppershutdownでmeta pageを作成するなどの終了処理を行い、smgrimmedsyncでIndexのファイルをfsyncする。ここでfsyncが必要なのは、ソートしてbtree indexを作成する場合、ページは共有メモリからではなくpallocで確保されるため。indexの作成中にcheckpointが発生しても、checkpointプロセスはindexの存在をまだ知らなくて、これらのページをディスクに確実に書き出す手段がない。クラッシュ後のリカバリはcheckpoint後のログレコードを再生するので、checkpoint前のページがディスク上に存在することを確実にするために、ここでfsyncする。