8.21. 概念型別
PostgreSQL 型別系統包含許多專用項目,這些項目統稱為概念型別(pseudo-type)。概念型別不能用作實際的欄位資料型別,但可以用來宣告函數的參數或結果型別。各個概念型別在於函數的行為不只是對應於簡單地獲取或回傳特定 SQL 資料型別的值的情況下很有用。Table 8.27 列出了現有的概念型別。
Table 8.27. Pseudo-Types
Name | Description |
---|---|
| Indicates that a function accepts any input data type. |
| Indicates that a function accepts any data type (see Section 37.2.5). |
| Indicates that a function accepts any array data type (see Section 37.2.5). |
| Indicates that a function accepts any non-array data type (see Section 37.2.5). |
| Indicates that a function accepts any enum data type (see Section 37.2.5 and Section 8.7). |
| Indicates that a function accepts any range data type (see Section 37.2.5 and Section 8.17). |
| Indicates that a function accepts or returns a null-terminated C string. |
| Indicates that a function accepts or returns a server-internal data type. |
| A procedural language call handler is declared to return |
| A foreign-data wrapper handler is declared to return |
| An index access method handler is declared to return |
| A tablesample method handler is declared to return |
| Identifies a function taking or returning an unspecified row type. |
| A trigger function is declared to return |
| An event trigger function is declared to return |
| Identifies a representation of DDL commands that is available to event triggers. |
| Indicates that a function returns no value. |
| Identifies a not-yet-resolved type, e.g. of an undecorated string literal. |
| An obsolete type name that formerly served many of the above purposes. |
Functions coded in C (whether built-in or dynamically loaded) can be declared to accept or return any of these pseudo data 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.
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 void
and record
as a result type (plus trigger
or event_trigger
when the function is used as a trigger or event trigger). Some also support polymorphic functions using the types anyelement
, anyarray
, anynonarray
, anyenum
, and anyrange
.
The internal
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 SQL query. If a function has at least one internal
-type argument then it cannot be called from SQL. 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 internal
unless it has at least one internal
argument.\