Postgresql 中文操作指南
8.21. Pseudo-Types #
PostgreSQL 类型系统包含许多专用条目,这些条目被统称为 pseudo-types。不能将伪类型用作列数据类型,但它可用于声明函数的参数或结果类型。每个可用的伪类型都可用于函数的行为不对应于简单地取用或返回特定 SQL 数据类型的值的情况。 Table 8.27 列出了现有的伪类型。
Table 8.27. Pseudo-Types
Name |
Description |
any |
表示函数接受任何输入数据类型。 |
anyelement |
表示函数接受任何数据类型(请参阅 Section 38.2.5 )。 |
anyarray |
表示函数接受任何数组数据类型(请参阅 Section 38.2.5 )。 |
anynonarray |
表示函数可接受任何非数组数据类型(请参阅 Section 38.2.5 )。 |
anyenum |
表示函数可接受任何枚举数据类型(请参阅 Section 38.2.5 和 Section 8.7 )。 |
anyrange |
表示函数可接受任何范围数据类型(请参阅 Section 38.2.5 和 Section 8.17 )。 |
anymultirange |
表示函数可接受任何多重范围数据类型(请参阅 Section 38.2.5 和 Section 8.17 )。 |
anycompatible |
表示函数可接受任何数据类型,同时自动将多个参数提升为一个通用数据类型(请参阅 Section 38.2.5 )。 |
anycompatiblearray |
表示函数可接受任何数组数据类型,同时自动将多个参数提升为一个通用数据类型(请参阅 Section 38.2.5 )。 |
anycompatiblenonarray |
表示函数可接受任何非数组数据类型,同时自动将多个参数提升为一个通用数据类型(请参阅 Section 38.2.5 )。 |
anycompatiblerange |
表示函数可接受任何范围数据类型,同时自动将多个参数提升为一个通用数据类型(请参阅 Section 38.2.5 和 Section 8.17 )。 |
anycompatiblemultirange |
表示函数可接受任何多重范围数据类型,同时自动将多个参数提升为一个通用数据类型(请参阅 Section 38.2.5 和 Section 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)。还有一些支持使用多态伪类型的多态函数,如上所示,并在 Section 38.2.5 中进行了详细讨论。
internal 伪类型用于声明仅供数据库系统内部调用的函数,而不是在 SQL 查询中直接调用。如果一个函数有至少一个 internal 类型的参数,那么无法从 SQL 中调用它。为保留此限制的类型安全,请务必遵循此编码规则:不要创建任何声明为返回 internal 的函数,除非它至少有一个 internal 参数。