登录
8.21. 伪类型#
PostgreSQL类型系统包含许多特殊用途条目,统称为伪类型。伪类型不能用作列数据类型,但可用于声明函数的参数或结果类型。每个可用的伪类型都适用于函数的行为不对应于简单地获取或返回特定SQL数据类型的值的情况。表 8.27列出了现有的伪类型。
表 8.27. 伪类型
名称 | 说明 |
---|---|
any | 表示函数接受任何输入数据类型。 |
anyelement | 表示函数接受任何数据类型(请参阅第 38.2.5 节)。 |
anyarray | 表示函数接受任何数组数据类型(请参阅第 38.2.5 节)。 |
anynonarray | 表示函数接受任何非数组数据类型(请参阅第 38.2.5 节)。 |
anyenum | 表示函数接受任何枚举数据类型(请参阅第 38.2.5 节和第 8.7 节)。 |
anyrange | 表示函数接受任何范围数据类型(请参阅第 38.2.5 节和第 8.17 节)。 |
anymultirange | 表示函数接受任何多范围数据类型(请参阅第 38.2.5 节和第 8.17 节)。 |
anycompatible | 表示函数接受任何数据类型,并自动将多个参数提升为通用数据类型(请参阅第 38.2.5 节)。 |
anycompatiblearray | 表示函数接受任何数组数据类型,并自动将多个参数提升为通用数据类型(请参阅第 38.2.5 节)。 |
anycompatiblenonarray | 表示函数接受任何非数组数据类型,并自动将多个参数提升为通用数据类型(请参阅第 38.2.5 节)。 |
anycompatiblerange | 表示函数接受任何范围数据类型,并自动将多个参数提升为通用数据类型(请参阅第 38.2.5 节和第 8.17 节)。 |
anycompatiblemultirange | 表示函数接受任何多范围数据类型,并自动将多个参数提升为通用数据类型(请参阅第 38.2.5 节和第 8.17 节)。 |
cstring | 表示函数接受或返回以 null 结尾的 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
)。一些语言还支持使用多态伪类型的多态函数,这些伪类型在上面显示,并在第 38.2.5 节中详细讨论。
伪类型internal
用于声明仅供数据库系统内部调用的函数,而不是在SQL查询中直接调用。如果函数至少有一个internal
类型参数,则无法从SQL调用该函数。为了保持此限制的类型安全性,遵循此编码规则非常重要:不要创建任何声明为返回internal
的函数,除非它至少有一个internal
参数。