# 8.21.伪类型

PostgreSQL类型系统包含许多特殊用途的条目,这些条目统称为伪类型。伪类型不能用作列数据类型,但可以用于声明函数的参数或结果类型。在函数的行为与简单地获取或返回特定SQL数据类型的值不一致的情况下,每个可用的伪类型都很有用。表8.27列出现有的伪类型。

表8.27.伪类型

名称 描述
任何 指示函数接受任何输入数据类型。
任何元素 指示函数接受任何数据类型(请参见第38.2.5节).
任意数组 指示函数接受任何数组数据类型(请参见第38.2.5节).
安诺纳雷 指示函数接受任何非数组数据类型(请参见第38.2.5节).
任何枚举 指示函数接受任何枚举数据类型(请参见第38.2.5节第8.7节).
任意范围 指示函数接受任何范围数据类型(请参阅第38.2.5节第8.17节).
任意多量程 指示函数接受任何多范围数据类型(请参见第38.2.5节第8.17节).
任何兼容的 指示函数接受任何数据类型,并自动将多个参数升级为公共数据类型(请参见第38.2.5节).
随便什么 指示函数接受任何数组数据类型,并自动将多个参数升级为公共数据类型(请参见第38.2.5节).
任何兼容的Narray 指示函数接受任何非数组数据类型,并自动将多个参数升级为公共数据类型(请参见第38.2.5节).
任何兼容语言 指示函数接受任何范围数据类型,并自动将多个参数升级为公共数据类型(请参见第38.2.5节第8.17节).
任意兼容多量程 指示函数接受任何多范围数据类型,并自动将多个参数升级为公共数据类型(请参见第38.2.5节第8.17节).
cstring 指示函数接受或返回以null结尾的C字符串。
内部的 指示函数接受或返回服务器内部数据类型。
语言处理器 程序语言调用处理程序被声明为返回语言处理器.
fdw_处理器 声明要返回的外部数据包装处理程序fdw_处理器.
表_am _handler 表访问方法处理程序被声明为返回表_am _handler.
索引处理程序 声明要返回的索引访问方法处理程序索引处理程序.
tsm_handler 一个tablesample方法处理程序被声明为返回tsm_handler.
记录 标识接受或返回未指定行类型的函数。
触发 触发器函数被声明为返回触发
事件触发 一个事件触发器函数被声明为返回事件触发。
pg_ddl_命令 标识可用于事件触发器的DDL命令的表示形式。
无效的 指示函数不返回任何值。
未知的 标识尚未解析的类型,例如未修饰的字符串文字。

用C编写的函数(无论是内置的还是动态加载的)可以声明为接受或返回这些伪类型中的任何一种。当伪类型用作参数类型时,函数作者需要确保函数安全运行。

用过程语言编写的函数只能在其实现语言允许的情况下使用伪类型。目前,大多数过程语言都禁止使用伪类型作为参数类型,并且只允许无效的记录因此,类型(加上触发事件触发当函数用作触发器或事件触发器时)。有些还支持使用多态伪类型的多态函数,如上文所示,并在中详细讨论第38.2.5节.

这个内部的伪类型用于声明仅由数据库系统内部调用的函数,而不是在SQL查询中直接调用的函数。如果函数至少有一个内部的-类型参数,则无法从SQL调用它。为了保护此限制的类型安全性,必须遵循以下编码规则:不要创建任何声明为返回的函数内部的除非它至少有一个内部的论点