2024年9月26日: PostgreSQL 17 发布!
支持的版本:当前 (17) / 16 / 15 / 14 / 13 / 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 的函数。

提交更正

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