他のバージョンの文書 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

第 31章SQL の拡張

目次
31.1. 拡張の作用法
31.2. PostgreSQLの型システム
31.2.1. 基本型
31.2.2. 複合型
31.2.3. ドメイン
31.2.4. 疑似型
31.2.5. 多様型
31.3. ユーザ定義関数
31.4. 問い合わせ言語 (SQL) 関数
31.4.1. 基本型を使用するSQL関数
31.4.2. 複合型を使用するSQL関数
31.4.3. テーブルソースとしてのSQL関数
31.4.4. 集合を返すSQL関数
31.4.5. 多様SQL関数
31.5. 関数のオーバーロード
31.6. 関数の揮発性分類
31.7. 手続き型言語関数
31.8. 内部関数
31.9. C言語関数
31.9.1. 動的ロード
31.9.2. C言語関数における基本型
31.9.3. C言語関数のためのVersion-0呼び出し規約
31.9.4. C言語関数のためのVersion-1呼び出し規約
31.9.5. コードの作成
31.9.6. 動的にロードされる関数のコンパイルとリンク
31.9.7. 拡張構築基盤
31.9.8. C言語関数における複合型引数
31.9.9. C言語関数から行(複合型)を返す
31.9.10. C言語関数から集合を返す
31.9.11. 引数と戻り値の多様性
31.10. ユーザ定義の集約
31.11. ユーザ定義の型
31.12. ユーザ定義の演算子
31.13. 演算子最適化に関する情報
31.13.1. COMMUTATOR
31.13.2. NEGATOR
31.13.3. RESTRICT
31.13.4. JOIN
31.13.5. HASHES
31.13.6. MERGES (SORT1, SORT2, LTCMP, GTCMP)
31.14. インデックス拡張機能へのインタフェース
31.14.1. インデックスメソッドと演算子クラス
31.14.2. インデックスメソッドのストラテジ
31.14.3. インデックスメソッドのサポートルーチン
31.14.4.
31.14.5. データ型を跨る演算子クラス
31.14.6. システムの演算子クラスに対する依存性
31.14.7. 演算子クラスの特殊な機能

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

31.1. 拡張の作用法

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

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