The <productname>PostgreSQL</productname> type system contains a number of special-purpose entries that are collectively called <firstterm>pseudo-types</firstterm>. A pseudo-type cannot be used as a column data type, but it can be used to declare a function's argument or result type. Each of the available pseudo-types is useful in situations where a function's behavior does not correspond to simply taking or returning a value of a specific <acronym>SQL</acronym> data type. <xref linkend="datatype-pseudotypes-table"/> lists the existing pseudo-types. PostgreSQL型システムには、疑似データ型と総称される特殊用途のエントリが多数含まれます。 疑似データ型は列データ型としては使用できませんが、関数の引数や結果データ型を宣言するために使用できます。 これらの使用可能な疑似データ型は、ある関数の振舞いが、特定のSQLデータ型の値を単に取得したり返したりする操作に対応していない場合に便利です。 表 8.27に既存の疑似データ型を列挙します。
表8.27 疑似データ型
型名 | 説明 |
---|---|
any | 関数がどのような入力データ型でも受け入れることを示します。 |
anyelement | 関数がどのような入力データ型でも受け入れることを示します(36.2.5を参照)。 |
anyarray | 関数がどのような配列データ型でも受け入れることを示します(36.2.5を参照してください)。 |
anynonarray | 関数がどのような非配列データ型でも受け入れることを示します(36.2.5を参照してください)。 |
anyenum | 関数が何らかの列挙データ型を受け入れることを示します(36.2.5および8.7を参照してください)。 |
anyrange | 関数が範囲データ型を受け入れることを示します(36.2.5 と 8.17を参照してください)。 |
anymultirange | 関数が多重範囲型を受け入れることを示します(36.2.5と8.17を参照してください)。 |
anycompatible | 関数が複数の引数を一般的なマルチデータ型に自動的に昇格させるどのようなデータ型でも受け入れることを示します(36.2.5)を参照してください)。 |
anycompatiblearray | 関数が複数の引数を一般的なデータ型に自動的に昇格させるどのような配列のデータ型でも受け入れることを示します(36.2.5を参照してください)。 |
anycompatiblenonarray | 関数が複数の引数を一般的なデータ型に自動的に昇格させるどのような非配列のデータ型でも受け入れることを示します(36.2.5を参照ください)。 |
anycompatiblerange | 関数が複数の引数を一般的なデータ型に自動的に昇格させるどのような範囲データ型でも受け入れることを示します(36.2.5と8.17を参照ください)。 |
anycompatiblemultirange | 関数が複数の引数を一般的なデータ型に自動的に昇格するすべての多重範囲データ型を受け入れることを示します。(36.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 | 未解決の型を特定します。例えば、修飾されていない文字列リテラルのような型です。 |
Functions coded in C (whether built-in or dynamically loaded) can be declared to accept or return any of these pseudo-types. It is up to the function author to ensure that the function will behave safely when a pseudo-type is used as an argument type. C言語で作成された関数(それが組み込みか動的にロードされるかに関係なく)は、これらの疑似データ型のどれでも受け入れたり返したりするように宣言することができます。 引数型として疑似データ型が使用されても関数が安全に機能するように、関数の作成時に気を付ける必要があります。
Functions coded in procedural languages can use pseudo-types only as
allowed by their implementation languages. At present most procedural
languages forbid use of a pseudo-type as an argument type, and allow
only <type>void</type> and <type>record</type> as a result type (plus
<type>trigger</type> or <type>event_trigger</type> when the function is used
as a trigger or event trigger). Some also support polymorphic functions
using the polymorphic pseudo-types, which are shown above and discussed
in detail in <xref linkend="extend-types-polymorphic"/>.
手続き型言語で作成された関数では、実装する言語によって許可された疑似データ型のみを使用できます。
現在、ほとんどの手続き型言語では疑似データ型を引数型として使用することが原則として禁止されており、結果型としてのvoid
とrecord
(および関数がトリガまたはイベントトリガとして使用される場合のtrigger
またはevent_trigger
)のみが許可されています。
また、一部の関数は、多様な疑似型を使用する多様関数をサポートしています。
これについては、前述の36.2.5で詳細に説明されています。
The <type>internal</type> pseudo-type is used to declare functions
that are meant only to be called internally by the database
system, and not by direct invocation in an <acronym>SQL</acronym>
query. If a function has at least one <type>internal</type>-type
argument then it cannot be called from <acronym>SQL</acronym>. To
preserve the type safety of this restriction it is important to
follow this coding rule: do not create any function that is
declared to return <type>internal</type> unless it has at least one
<type>internal</type> argument.
internal
疑似データ型は、データベースシステムによって内部的にのみ呼び出される関数を宣言する場合に使用され、SQL問い合わせでの直接呼び出しには使用できません。
関数に少なくとも1つのinternal
型の引数があると、これをSQLから呼び出すことはできません。
この制限の影響からデータ型の安全性を保持するためには、次のコーディング規則に従うことが重要です。
internal
引数が少なくとも1つある場合を除き、internal
を返すと宣言される関数を作成すべきではありません。