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する。