PostgreSQL型システムには、疑似データ型と総称される特殊用途のエントリが多数入っています。 疑似データ型は列データ型としては使用できませんが、関数の引数や結果データ型を宣言するために使用できます。 これらの使用可能な疑似データ型は、ある関数の振る舞いが、特定のSQLデータ型の値を単に取得したり返したりする操作に対応していない場合に便利です。 表8-20に既存の疑似データ型を列挙します。
表 8-20. 疑似データ型
型名 | 説明 |
---|---|
any | 関数が、どのような入力データ型でも受け入れることを示します。 |
anyarray | 関数が、どのような配列データ型でも受け入れることを示します。 (項33.2.5を参照してください。) |
anyelement | 関数が、どのような入力データ型でも受け入れることを示します。 (項33.2.5を参照してください。) |
cstring | 関数がヌル終端のC文字列を受け入れる、もしくは、返すことを示します。 |
internal | 関数がサーバ内部用データ型を受け入れる、もしくは、返すことを示します。 |
language_handler | 手続き言語呼び出しハンドラはlanguage_handlerを返すものとして宣言されます。 |
record | 未指定の行の型を返す関数を指定します。 |
trigger | トリガ関数はtriggerを返すものとして宣言されます。 |
void | 関数が値を返さないことを示します。 |
opaque | 過去に上記の目的すべてを果たしていた古いデータ型の名前です。 |
C言語で作成された関数(それが組み込みか動的にロードされるかに関係なく)は、これらの疑似データ型のどれでも受け入れたり返したりするように宣言することができます。 引数型として疑似データ型が使用されても関数が安全に機能するように、関数の作成時に気をつける必要があります。
手続き型言語で作成された関数では、実装言語によって許可された疑似データ型のみを使用できます。 現在、すべての手続き型言語では疑似データ型を引数型として使用することが原則として禁止されており、結果型としての void とrecord(、関数がトリガとして使用される場合のtrigger)のみが許可されています。 また、anyarrayとanyelementを使用する多様性関数をサポートするものもあります。
internal疑似データ型は、データベースシステムによって内部的にのみ呼び出される関数を宣言する場合に使用され、SQL問い合わせでの直接呼び出しには使用できません。 関数に少なくとも1つのinternal型の引数があると、これをSQLから呼び出すことはできません。 この制限の影響からデータ型の安全性を保持するためには、次のコーディング規則に従うことが重要です。 internal引数が少なくとも1つある場合を除き、internalを返すと宣言される関数を作成すべきではありません。