無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

8.19. 疑似データ型

PostgreSQL 型システムには、 疑似データ型 と総称される特殊用途のエントリが多数含まれます。 疑似データ型は列データ型としては使用できませんが、関数の引数や結果データ型を宣言するために使用できます。 これらの使用可能な疑似データ型は、ある関数の振舞いが、特定の SQL データ型の値を単に取得したり返したりする操作に対応していない場合に便利です。 表8-24 に既存の疑似データ型を列挙します。

表 8-24. 疑似データ型

型名 説明
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 を返すものとして宣言されます。
record 未指定の行型を返す関数を指定します。
trigger トリガ関数は trigger を返すものとして宣言されます。
void 関数が値を返さないことを示します。
opaque 過去に上記の目的すべてを果たしていた古いデータ型の名前です。

C言語で作成された関数(それが組み込みか動的にロードされるかに関係なく)は、これらの疑似データ型のどれでも受け入れたり返したりするように宣言することができます。 引数型として疑似データ型が使用されても関数が安全に機能するように、関数の作成時に気を付ける必要があります。

手続き型言語で作成された関数では、実装する言語によって許可された疑似データ型のみを使用できます。 現在、すべての手続き型言語では疑似データ型を引数型として使用することが原則として禁止されており、結果型としての void record (および関数がトリガとして使用される場合の trigger )のみが許可されています。 また、 anyelement anyarray anynonarray anyenum および anyrange 型を使用する多様性関数をサポートするものもあります。

internal 疑似データ型は、データベースシステムによって内部的にのみ呼び出される関数を宣言する場合に使用され、 SQL 問い合わせでの直接呼び出しには使用できません。 関数に少なくとも1つの internal 型の引数があると、これを SQL から呼び出すことはできません。 この制限の影響からデータ型の安全性を保持するためには、次のコーディング規則に従うことが重要です。 internal 引数が少なくとも1つある場合を除き、 internal を返すと宣言される関数を作成すべきではありません。


powered by SEO.CUG.NET