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