Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16

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 语言编码的函数(无论是内置函数还是动态加载的函数)都可以声明为接受或返回任何这些伪类型。函数作者负责确保在将伪类型用作参数类型时函数的行为安全。

以过程语言编码的函数只能按照其实现语言允许的方式使用伪类型。目前,大多数过程语言禁止将伪类型用作参数类型,并且仅允许 voidrecord 作为结果类型(当函数用作触发器或事件触发器时,还允许 triggerevent_trigger)。一些语言还支持使用多态伪类型的多态函数,这些伪类型在上面显示,并在 第 38.2.5 节 中详细讨论。

伪类型 internal 用于声明仅供数据库系统内部调用的函数,而不是在 SQL 查询中直接调用。如果函数至少有一个 internal 类型参数,则无法从 SQL 调用该函数。为了保持此限制的类型安全性,遵循此编码规则非常重要:不要创建任何声明为返回 internal 的函数,除非它至少有一个 internal 参数。