伪类型(Pseudo-Types)是PostgreSQL中不能作为字段的一种数据类型,但是它可以用于声明函数的参数或者结果类型,所包含的类型有以下几种。
·any:用于指示函数的输入参数可以是任意数据类型。
·anyelement:表示一个函数接受任何数据类型。
·anyarray:表示一个函数接受任何数组类型。
·anynonarray:表示一个函数接受任何非数组类型。
·anyenum:表示一个函数接受任何枚举类型。
·anyrange:表示一个函数接受任何范围类型。
·cstring:表示一个函数接受或返回一个以空字符(\0)结尾的C语言字符串。
·internal:表示一个函数接受或者返回一种服务器内部的数据类型。
·language_handler:声明一个函数的返回值类型是PL语言的handler函数。
·fdw_handler:声明一个函数的返回值类型是FOREIGN-DATA WRAPPER的handler函数。
·record:标识一个函数返回一个未详细定义各列的row类型。
·trigger:一个触发器函数要声明为返回trigger类型。
·void:表示一个函数没有返回值。
·opaque:已经过时的类型,早期的PostgreSQL版本中用于上面这些用途。
用C语言编写的函数(不管是内置的还是动态装载的)都可以声明为接受或返回上面任意一种伪数据类型。在把伪类型用作函数参数类型时,PostgreSQL数据库本身对类型的检查就少了很多,保证类型正确的任务就交给了写函数的开发人员。
用过程语言编写的函数不一定都能使用上面列出的全部伪类型,具体能使用哪些伪类型需要查看相关的过程语言文档,或者查看过程语言的实现。通常情况下,过程语言不支持使用any类型,但基本都能支持使用void和record作为结果类型,能支持多态函数的过程语言还支持使用anyarray、anyelement、anyenum和anynonarray类型。
伪类型internal用于声明只能在数据库系统内部调用的函数,不能直接在SQL查询中调用它们。如果函数至少有一个internal类型的参数,那么就不能从SQL中调用它。为了保留这个限制的类型安全,我们一定要遵循以下编码规则:对于没有任何internal参数的函数,不要把返回类型创建为internal类型。