他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

第 32章SQLの拡張

目次
32.1. 拡張の作用法
32.2. PostgreSQLの型システム
32.2.1. 基本型
32.2.2. 複合型
32.2.3. ドメイン
32.2.4. 疑似型
32.2.5. 多様型
32.3. ユーザ定義関数
32.4. 問い合わせ言語(SQL)関数
32.4.1. 基本型を使用するSQL関数
32.4.2. 複合型を使用するSQL関数
32.4.3. 出力パラメータを持つ関数
32.4.4. テーブルソースとしてのSQL関数
32.4.5. 集合を返すSQL関数
32.4.6. 多様SQL関数
32.5. 関数のオーバーロード
32.6. 関数の変動性分類
32.7. 手続き型言語関数
32.8. 内部関数
32.9. C言語関数
32.9.1. 動的ロード
32.9.2. C言語関数における基本型
32.9.3. C言語関数のためのVersion-0呼び出し規約
32.9.4. C言語関数のためのVersion-1呼び出し規約
32.9.5. コードの作成
32.9.6. 動的にロードされる関数のコンパイルとリンク
32.9.7. 拡張構築基盤
32.9.8. C言語関数における複合型引数
32.9.9. C言語関数から行(複合型)を返す
32.9.10. C言語関数から集合を返す
32.9.11. 引数と戻り値の多様性
32.10. ユーザ定義の集約
32.11. ユーザ定義の型
32.12. ユーザ定義の演算子
32.13. 演算子最適化に関する情報
32.13.1. COMMUTATOR
32.13.2. NEGATOR
32.13.3. RESTRICT
32.13.4. JOIN
32.13.5. HASHES
32.13.6. MERGES (SORT1, SORT2, LTCMP, GTCMP)
32.14. インデックス拡張機能へのインタフェース
32.14.1. インデックスメソッドと演算子クラス
32.14.2. インデックスメソッドのストラテジ
32.14.3. インデックスメソッドのサポートルーチン
32.14.4.
32.14.5. データ型をまたがる演算子クラス
32.14.6. システムの演算子クラスに対する依存性
32.14.7. 演算子クラスの特殊な機能

本節では、PostgreSQLSQL問い合わせ言語を、以下のようなものを追加することでどのように拡張できるかを説明します。

32.1. 拡張の作用法

PostgreSQLは、自分自身の操作がカタログに定義された方法で駆動されているため拡張が可能です。 もし標準のリレーショナルデータベースシステムに慣れ親しんでいるのであれば、システムカタログと呼ばれるものの中に、データベース、テーブル、列などの情報が格納されていることは知っていると思います (システムによってはデータディクショナリと呼ぶものもあります)。 このカタログは、ユーザの目には他のテーブルと同じように見えますが、DBMSは内部情報をそこに格納しているのです。 PostgreSQLと標準のリレーショナルデータベースシステムの重要な違いは、PostgreSQLはカタログにより多くの情報を格納するということです。 テーブルと列に関する情報だけではなく、データ型、関数、アクセスメソッドなどの情報も格納されています。 これらのテーブルはユーザが変更できます。 そして、PostgreSQLは操作をこれらのテーブルに基づいて行うので、PostgreSQLはユーザによって拡張することができるのです。 これに対して、一般のデータベースシステムでは、ソースコード内にハードコーディングされたプロシージャを変えるか、DBMSベンダによって特別に書かれたモジュールをロードしなければ拡張することができません。

さらにPostgreSQLサーバは動的ローディングによってユーザの作成したコードを取り入れることができます。 つまり、ユーザが新しい型か関数を実装するオブジェクトコードファイル(例えば共有ライブラリ)を指定することができ、PostgreSQLは要求された通りにロードするのです。 SQLで作成されたコードをサーバに追加するのはさらに簡単です。 このように演算を"その場で"変えることができるため、PostgreSQLは新しいアプリケーションや格納構造をラピッドプロトタイプする場合に適しています。