Postgresql 中文操作指南

8.21. Pseudo-Types #

PostgreSQL 类型系统包含许多专用条目,这些条目被统称为 pseudo-types。不能将伪类型用作列数据类型,但它可用于声明函数的参数或结果类型。每个可用的伪类型都可用于函数的行为不对应于简单地取用或返回特定 SQL 数据类型的值的情况。 Table 8.27 列出了现有的伪类型。

Table 8.27. Pseudo-Types

Name

Description

any

表示函数接受任何输入数据类型。

anyelement

表示函数接受任何数据类型(请参阅 Section 38.2.5 )。

anyarray

表示函数接受任何数组数据类型(请参阅 Section 38.2.5 )。

anynonarray

表示函数可接受任何非数组数据类型(请参阅 Section 38.2.5 )。

anyenum

表示函数可接受任何枚举数据类型(请参阅 Section 38.2.5Section 8.7 )。

anyrange

表示函数可接受任何范围数据类型(请参阅 Section 38.2.5Section 8.17 )。

anymultirange

表示函数可接受任何多重范围数据类型(请参阅 Section 38.2.5Section 8.17 )。

anycompatible

表示函数可接受任何数据类型,同时自动将多个参数提升为一个通用数据类型(请参阅 Section 38.2.5 )。

anycompatiblearray

表示函数可接受任何数组数据类型,同时自动将多个参数提升为一个通用数据类型(请参阅 Section 38.2.5 )。

anycompatiblenonarray

表示函数可接受任何非数组数据类型,同时自动将多个参数提升为一个通用数据类型(请参阅 Section 38.2.5 )。

anycompatiblerange

表示函数可接受任何范围数据类型,同时自动将多个参数提升为一个通用数据类型(请参阅 Section 38.2.5Section 8.17 )。

anycompatiblemultirange

表示函数可接受任何多重范围数据类型,同时自动将多个参数提升为一个通用数据类型(请参阅 Section 38.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 38.2.5 中进行了详细讨论。

internal 伪类型用于声明仅供数据库系统内部调用的函数,而不是在 SQL 查询中直接调用。如果一个函数有至少一个 internal 类型的参数,那么无法从 SQL 中调用它。为保留此限制的类型安全,请务必遵循此编码规则:不要创建任何声明为返回 internal 的函数,除非它至少有一个 internal 参数。