受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发版本: devel

8.21. 伪类型 #

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

Table 8.27. 伪类型

名字 描述
any 表示一个函数可以接受任意输入数据类型。
anyelement 表示一个函数可以接受任意数据类型(参见Section 36.2.5)。
anyarray 表示一个函数可以接受任意数组数据类型(参见Section 36.2.5
anynonarray 表示一个函数可以接受任意非数组数据类型(参见Section 36.2.5)。
anyenum 表示一个函数可以接受任意枚举数据类型(参见Section 36.2.5Section 8.7)。
anyrange 表示一个函数可以接受任意范围数据类型(参见Section 36.2.5Section 8.17)。
anymultirange 表示一个函数可以接受任意多范围数据类型 (参见 Section 36.2.5Section 8.17)。
anycompatible 表示一个函数可以接受任意数据类型,并自动将多个参数提升为公共数据类型 (参见 Section 36.2.5)。
anycompatiblearray 表示一个函数可以接受任意数组数据类型,并自动将多个参数提升为公共数据类型 (参见 Section 36.2.5)。
anycompatiblenonarray 表示一个函数可以接受任意非数组数据类型,并自动将多个参数提升为公共数据类型 (参见 Section 36.2.5)。
anycompatiblerange 表示一个函数可以接受任意范围数据类型,并自动将多个参数提升为公共数据类型 (参见 Section 36.2.5Section 8.17)。
anycompatiblemultirange 表示一个函数可以接受任意多范围数据类型,并自动将多个参数提升为公共数据类型 (参见 Section 36.2.5Section 8.17)。
cstring 表示一个函数接受或返回一个以空字符结尾的 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 作为结果类型)。 有些语言还支持借助多态伪类型来实现多态函数;详见 Section 36.2.5

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

提交更正

如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。