PostgreSQLのコードを読む話(2)
前回 の続き。 先日のサッポロビーム で活動してきた。 今回はほとんどコードを読んでいない。 postgres.c の PostgresMain の query とか parse とは?というあたりを調べた。 あとはPostgreSQLのドキュメントを色々読んでた。 "簡易問い合わせ"と"拡張問い合わせ" PostgreSQLのドキュメントの「フロントエンド/バックエンドプロトコル」が参考になります。通常利用される問い合わせプロトコルに"簡易問い合わせ"と"拡張問い合わせ"があるとのこと。 フロントエンド/バックエンドプロトコル 接続開始 通常操作 簡易問い合わせ Query 拡張問い合わせ Parse Bind Execute 関数呼び出し FunctionCall(非推奨らしい、Bind & Executeを利用せよとのこと) その他特殊な操作向け Copy など... 接続終了 PostgresMain ではこのプロトコルの内、接続開始後の各サブプロトコルの種類を判別してそれぞれのサブプロトコルで定義される操作を呼び出している模様。 簡易問い合わせと拡張問い合わせの概要は次の通り。 "簡易問い合わせ"プロトコルでは、フロントエンドはテキストで問い合わせ文字列を単に送信し、バックエンドによって解析され、即実行されます。 "拡張問い合わせ" プロトコルでは、問い合わせの処理は、解析、パラメータ値の結び付け、そして実行という複数の段階に分離されます。 これは複雑性が加わりますが、柔軟性と性能という点で利点が生まれます。 このあたりを念頭に各操作の内容を読んでいけばなんとかなりそう。 その他 演算子クラス/演算子族 ひたすらドキュメントを読んでたらインデックス周りで演算子クラスとか演算子族というのが出てきた。 インデックスの種類やデータ型ごとに演算子クラスをユーザが定義することで、独自にインデックスを拡張できる?らしい。演算子クラスをまとめたのが演算子族?なのかな?インデックス周りを確認するときにもうちょっとちゃんと調べる予定。 htt...