The PostgreSQL type system contains a number of
special-purpose entries that are collectively called pseudo-types.
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 SQL data type. Table
5-21 lists the existing pseudo-types.
Table 5-21. Pseudo-Types
| Type name |
Description |
| record |
Identifies a function returning an unspecified row
type |
| any |
Indicates that a function accepts any input data type
whatever |
| anyarray |
Indicates that a function accepts any array data type |
| void |
Indicates that a function returns no value |
| trigger |
A trigger function is declared to return trigger |
| language_handler |
A procedural language call handler is declared to
return language_handler |
| cstring |
Indicates that a function accepts or returns a
null-terminated C string |
| internal |
Indicates that a function accepts or returns a
server-internal data type |
| opaque |
An obsolete type name that formerly served all the
above purposes |
Functions coded in C (whether built-in or dynamically loaded) may 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 may use pseudo-types only as allowed by their
implementation languages. At present the procedural languages all forbid use of a
pseudo-type as argument type, and allow only void as a result type
(plus trigger when the function is used as a trigger).
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 a
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.