支持的版本: 当前 (17) / 16 / 15 / 14 / 13
开发版本: devel
不支持的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3

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 节中详细讨论)的多态函数。

internal 伪类型用于声明仅由数据库系统内部调用,而不是通过SQL查询直接调用的函数。如果函数至少有一个 internal 类型参数,则不能从SQL调用。为了保留此限制的类型安全性,请务必遵循此编码规则:除非函数至少有一个 internal 参数,否则不要创建声明为返回 internal 的任何函数。

提交更正

如果您发现文档中有任何不正确、与特定功能的体验不符或需要进一步澄清的地方,请使用此表单报告文档问题。