本文介绍了伪类型的定义及相关语法。

伪类型

名字

描述

any

表示一个函数可以接受任意输入数据类型

anyelement

表示一个函数可以接受任意数据类型

anyarray

表示一个函数可以接受任意数组数据类型

anynonarray

表示一个函数可以接受任意非数组数据类型

anyenum

表示一个函数可以接受任意枚举数据类型

anyrange

表示一个函数可以接受任意范围数据类型

anycompatible

指示函数接受任何数据类型,并自动将多个参数提升为通用数据类型

anycompatiblearray

指示函数接受任何数组数据类型,并自动将多个参数提升为通用数据类型

anycompatiblenonarray

指示函数接受任何非数组数据类型,并将多个参数自动提升为通用数据类型

anycompatiblerange

指示函数接受任何范围数据类型,并将多个参数自动提升为通用数据类型

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作为结果类型(如果函数被用于一个触发器或者事件触发器, trigger或者event_trigger也被允许作为结果类型)。

internal伪类型用于定义只在数据库系统内部调用的函数,这些函数不会被 SQL 直接调用。如果一个函数拥有至少一个internal类型的参数,则它不能从 SQL 中被调用。为了保持这种限制的类型安全性,遵循以下编码规则非常重要:不要创建任何被声明要返回internal的函数,除非它有至少一个internal参数。