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.5和Section 8.7)。 |
anyrange |
表示一个函数可以接受任意范围数据类型(参见Section 36.2.5和Section 8.17)。 |
anymultirange |
表示一个函数可以接受任意多范围数据类型 (参见 Section 36.2.5 和 Section 8.17)。 |
anycompatible |
表示一个函数可以接受任意数据类型,并自动将多个参数提升为公共数据类型 (参见 Section 36.2.5)。 |
anycompatiblearray |
表示一个函数可以接受任意数组数据类型,并自动将多个参数提升为公共数据类型 (参见 Section 36.2.5)。 |
anycompatiblenonarray |
表示一个函数可以接受任意非数组数据类型,并自动将多个参数提升为公共数据类型 (参见 Section 36.2.5)。 |
anycompatiblerange |
表示一个函数可以接受任意范围数据类型,并自动将多个参数提升为公共数据类型 (参见 Section 36.2.5 和 Section 8.17)。 |
anycompatiblemultirange |
表示一个函数可以接受任意多范围数据类型,并自动将多个参数提升为公共数据类型 (参见 Section 36.2.5 和 Section 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 编写的函数(无论是内置的还是动态装载的)都可以声明为接受或 返回这些伪类型中的任意一种。函数作者必须自行确保,当伪类型被用作 参数类型时,该函数的行为仍然安全。
用过程语言编写的函数,只有在其实现语言允许的情况下才能使用伪类型。 目前,大多数过程语言都禁止把伪类型用作参数类型,而只允许把 void 和 record 用作结果类型 (如果函数被用作触发器或事件触发器,则也允许 trigger 或 event_trigger 作为结果类型)。 有些语言还支持借助多态伪类型来实现多态函数;详见 Section 36.2.5。
internal 伪类型用于声明那些只应由数据库系统内部调用、 而不应被 SQL 查询直接调用的函数。如果一个函数 至少有一个 internal 类型参数,那么它就不能从 SQL 中调用。为了保持这一限制的类型安全性, 必须遵守这样一条编码规则:除非函数至少有一个 internal 类型参数,否则不要声明任何返回 internal 的函数。
如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。