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 节 中进行了详细讨论。
当声明预计只在SQL查询。如果某个函数至少有一个 内部
类型参数,那么该函数不能从SQL中调用。为了保留该限制的类型安全性,遵循此编码规则非常重要:不要创建任何声明为返回 内部
的函数,除非它至少有一个 内部
参数。