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