2025年9月25日: PostgreSQL 18 发布!
支持的版本: 当前 (18) / 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. 伪类型 #

The PostgreSQL type system contains a number of special-purpose entries that are collectively called pseudo-types. A pseudo-type cannot be used as a column data type, but it can be used to declare a function's argument or result type. Each of the available pseudo-types is useful in situations where a function's behavior does not correspond to simply taking or returning a value of a specificSQLdata type. 表 8.27 lists the existing pseudo-types.

表 8.27. 伪类型

名称 描述
任意 表示函数接受任何输入数据类型。
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 用于声明仅供数据库系统内部调用的函数,而不是通过直接在查询中调用。如果一个函数至少有一个 internal 类型的参数,那么它就不能从SQL查询中调用。为了保持这种限制的类型安全,遵循以下编码规则很重要:不要创建任何声明返回 internal 的函数,除非它至少有一个 internal 参数。SQL. To preserve the type safety of this restriction it is important to follow this coding rule: do not create any function that is declared to return internal unless it has at least one internal argument.

提交更正

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