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

8.21. 伪类型 #

PostgreSQL 类型系统包含了许多特殊的目的条目,统称为伪类型。伪类型不能用作列数据类型,但可用于声明函数的参数或结果类型。每种伪类型都适用于函数的行为不对应于直接取用或返回特定SQL数据类型的值的情况。表 8.27 列出了现有的伪类型。

表 8.27. 伪类型

名称 说明
any 指示函数可接受任何输入数据类型。
anyelement 指示函数可接受任何数据类型(参见36.2.5 节)。
anyarray 指示函数可接受任何数组数据类型(参见36.2.5 节)。
anynonarray 指示函数可接受任何非数组数据类型(参见36.2.5 节)。
anyenum 指示函数可接受任何枚举数据类型(参见36.2.5 节8.7 节)。
anyrange 指示函数可接受任何范围数据类型(参见36.2.5 节8.17 节)。
anymultirange 指示函数可接受任何多重范围数据类型(参见36.2.5 节8.17 节)。
anycompatible 指示函数可接受任何数据类型,并可将多个参数自动提升为一个通用数据类型(参见36.2.5 节)。
anycompatiblearray 指示函数可接受任何数组数据类型,并可将多个参数自动提升为一个通用数据类型(参见36.2.5 节)。
anycompatiblenonarray 指示函数可接受任何非数组数据类型,并可将多个参数自动提升为一个通用数据类型(参见36.2.5 节)。
anycompatiblerange 这表示一个函数接受任何范围数据类型,并自动将多个参数提升为公共数据类型(请参阅 第 36.2.5 节第 8.17 节)。
anycompatiblemultirange 这表示一个函数接受任何多范围数据类型,并自动将多个参数提升为公共数据类型(请参阅 第 36.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)。有些语言还支持使用多态伪类型的多态函数,这些伪类型如上所示,并在 第 36.2.5 节 中进行了详细讨论。

当声明预计只在SQL查询。如果某个函数至少有一个 内部 类型参数,那么该函数不能从SQL中调用。为了保留该限制的类型安全性,遵循此编码规则非常重要:不要创建任何声明为返回 内部 的函数,除非它至少有一个 内部 参数。