【PostgreSQL】从零开始:(三十六)数据类型-伪类型
2023-12-29 07:36:29
伪类型
伪类型是指在编程语言中使用的一种类型名称,用来表示某个值可能具有的多种类型之一。伪类型通常不是真正的数据类型,而是一种抽象概念,用来描述编程逻辑中的类型关系。在一些静态类型语言中,伪类型可以作为某个变量的类型注解,用来表示该变量可以接受不同的类型值。伪类型的使用可以增加代码的灵活性,但也可能引入类型安全方面的问题。
PostgreSQL伪类型
在PostgreSQL中,伪类型是一组特殊的数据类型,用于表示与数据库相关的特定信息。这些伪类型不能用于声明表的列或函数的参数,但可以用于查询、视图和函数的返回类型。
以下是一些常见的PostgreSQL伪类型:
- REFCURSOR:用于返回一个游标,它可以被用作动态查询的结果集。
- VOID:用于表示没有返回值的函数。
- TRIGGER:用于表示触发器函数的参数类型。
- ANYARRAY和ANYELEMENT:用于表示未知数组或元素类型的参数。
- RECORD:用于表示未知结构的数据类型。
ANY:用于表示未知数据类型的参数。
这些伪类型在特定情况下非常有用,可以让开发人员更灵活地处理不确定的数据类型或结果集。
PostgreSQL 类型系统包含许多特殊用途的条目,这些条目统称为伪类型。伪类型不能用作列数据类型,但可用于声明函数的参数或结果类型。在函数的行为与简单地获取或返回特定 SQL 数据类型的值不对应的情况下,每个可用的伪类型都很有用。
伪类型表
名字 | 描述 |
---|---|
any | 指示函数接受任何输入数据类型。 |
anyelement | 指示函数接受任何数据类型。 |
anyarray | 指示函数接受任何数组数据类型。 |
anynonarray | 指示函数接受任何非数组数据类型。 |
anyenum | 指示函数接受任何枚举数据类型。 |
anyrange | 指示函数接受任何范围数据类型。 |
anymultirange | 指示函数接受任何多范围数据类型。 |
anycompatible | 指示函数接受任何数据类型,并自动将多个参数提升为通用数据类型。 |
anycompatiblearray | 指示函数接受任何数组数据类型,并自动将多个参数提升为通用数据类型。 |
anycompatiblenonarray | 指示函数接受任何非数组数据类型,并自动将多个参数提升为通用数据类型。 |
anycompatiblerange | 指示函数接受任何范围数据类型,并自动将多个参数提升为通用数据类型。 |
anycompatiblemultirange | 指示函数接受任何多范围数据类型,并自动将多个参数提升为通用数据类。 |
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 | 声明 tablesample 方法处理程序将返回 。tsm_handler |
record | 标识接受或返回未指定行类型的函数。 |
trigger | 声明触发器函数返回trigger. |
event_trigger | 声明事件触发器函数返回event_trigger. |
pg_ddl_command | 标识可用于事件触发器的 DDL 命令的表示形式。 |
void | 指示函数不返回任何值。 |
unknown | 标识尚未解析的类型,例如,未修饰的字符串文本。 |
用 C 编码的函数(无论是内置的还是动态加载的)可以声明为接受或返回这些伪类型中的任何一个。函数作者有责任确保在将伪类型用作参数类型时函数的行为安全。
用过程语言编码的函数只能在其实现语言允许的情况下使用伪类型。目前,大多数过程语言禁止使用伪类型作为参数类型,只允许将伪类型用作结果类型(加号或当函数用作触发器或事件触发器时)。有些还支持使用多态伪类型的多态函数。
伪类型用于声明仅供数据库系统内部调用的函数,而不是通过 SQL 查询中的直接调用调用的函数。如果一个函数至少有一个 -type 参数,则不能从 SQL 调用它。为了保持此限制的类型安全性,请务必遵循以下编码规则:不要创建任何声明为返回的函数,除非它至少有一个参数。
文章来源:https://blog.csdn.net/sinat_36528886/article/details/135231431
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!