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 编写的函数(无论是内置的还是动态加载的)可以声明为接受或返回这些伪类型中的任何一个。函数作者有责任确保当伪类型用作参数类型时,该函数会安全地运行。
用过程语言编写的函数只能按其实现语言允许的方式使用伪类型。目前,大多数过程语言禁止使用伪类型作为参数类型,并且仅允许 void
和 record
作为结果类型(当该函数用作触发器或事件触发器时,则允许 trigger
或 event_trigger
)。有些还支持使用多态伪类型(如上所示,并在 第 36.2.5 节中详细讨论)的多态函数。
internal
伪类型用于声明仅由数据库系统内部调用,而不是通过SQL查询直接调用的函数。如果函数至少有一个 internal
类型参数,则不能从SQL调用。为了保留此限制的类型安全性,请务必遵循此编码规则:除非函数至少有一个 internal
参数,否则不要创建声明为返回 internal
的任何函数。
如果您发现文档中有任何不正确、与特定功能的体验不符或需要进一步澄清的地方,请使用此表单报告文档问题。