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