选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0
历史版本PostgreSQL 9.4 已于 2020 年 2 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本

8.20. 伪类型 #

PostgreSQL 的类型系统中包含一些特殊用途 的条目,统称为 伪类型。伪类型不能作为列 数据类型使用,但可以用于声明函数的参数类型或结果类型。每一种 伪类型都适用于这样的场景:函数的行为并不对应于简单地接受或返回 某个特定 SQL 数据类型的值。 表 8.25 列出了现有的伪类型。

表 8.25. 伪类型

名字 描述
any 表示一个函数可以接受任意输入数据类型。
anyelement 表示一个函数可以接受任意数据类型(参见第 35.2.5 节)。
anyarray 表示一个函数可以接受任意数组数据类型(参见第 35.2.5 节
anynonarray 表示一个函数可以接受任意非数组数据类型(参见第 35.2.5 节)。
anyenum 表示一个函数可以接受任意枚举数据类型(参见第 35.2.5 节第 8.7 节)。
anyrange 表示一个函数可以接受任意范围数据类型(参见第 35.2.5 节第 8.17 节)。
cstring 表示一个函数接受或返回一个以空字符结尾的 C 字符串。
internal 表示一个函数接受或返回一个服务器内部数据类型。
language_handler 表示过程语言调用处理器被声明为返回 language_handler
fdw_handler 表示外部数据包装器处理器被声明为返回 fdw_handler
record 标识一个接受或返回未指定行类型的函数。
trigger 触发器函数被声明为返回trigger.
event_trigger 事件触发器函数被声明为返回event_trigger.
void 表示一个函数不返回值。
opaque 一个已废弃的类型名称,以前用于上述所有用途。

用 C 编写的函数(无论是内置的还是动态装载的)都可以声明为接受或 返回这些伪类型中的任意一种。函数作者必须自行确保,当伪类型被用作 参数类型时,该函数的行为仍然安全。

用过程语言编写的函数,只有在其实现语言允许的情况下才能使用伪类型。目前,大多数过程语言都禁止把伪类型用作参数类型,而只允许把voidrecord用作结果类型(如果函数被用作触发器或事件触发器,则也允许triggerevent_trigger)。有些语言还支持使用anyelementanyarrayanynonarrayanyenumanyrange实现多态函数。

internal 伪类型用于声明那些只应由数据库系统内部调用、 而不应被 SQL 查询直接调用的函数。如果一个函数 至少有一个 internal 类型参数,那么它就不能从 SQL 中调用。为了保持这一限制的类型安全性, 必须遵守这样一条编码规则:除非函数至少有一个 internal 类型参数,否则不要声明任何返回 internal 的函数。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。