↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3

53.10. pg_cast #

目录 pg_cast 存储数据类型转换路径,包括内置路径和用户定义路径。

需要注意的是,pg_cast 并不表示系统知道如何执行的所有类型转换,它只包括那些不能从某些通用规则推导出的转换。例如,一个域及其基础类型之间的转换并未显式地在 pg_cast 中展示。另一个重要的例外是“自动的基于 I/O 的类型转换”,它们通过数据类型自己的 I/O 函数来转换成(或者转换自)text 或其他字符串类型,这些转换也没有显式地在 pg_cast 中表示。

表 53.10. pg_cast 列

列类型

描述

oid oid

行标识符

castsource oid(引用 pg_type.oid)

源数据类型的 OID

casttarget oid(引用 pg_type.oid)

目标数据类型的 OID

castfunc oid(引用 pg_proc.oid)

执行该转换的函数的 OID。如果该转换方法不需要一个函数则存储 0。

castcontext char

指示可在哪些上下文中调用此类型转换。e 表示只能显式调用(使用 CAST 或 :: 语法)。a 表示可在向目标列赋值时隐式调用,也可显式调用。i 表示可在表达式中隐式调用,也允许前述其他调用方式。

castmethod char

指示转换如何被执行。f 表明使用 castfunc 中指定的函数。i 表明使用输入/输出函数。b 表明该类型是二进制可强制转换的,因此不需要转换。


在 pg_cast 里列出的类型转换函数必须总是以转换的源类型作为它的第一个参数类型,并且返回转换的目标类型作为它的结果类型。一个类型转换函数最多有三个参数。如果出现了第二个参数,必须是 integer 类型;它接受与目标类型关联的类型修饰符,如果没有,就是 -1。如果出现了第三个参数,那么必须是 boolean 类型;如果该类型转换是一种显式转换,那么它接受 true,否则接受 false。

在 pg_cast 里创建一条源类型和目标类型相同的记录是合理的,只要相关联的函数接受多过一个参数。这样的记录代表“长度转换函数”,它们把该类型的值转换为对特定类型修饰符值而言合法的值。

如果一个 pg_cast 的项有着不同的源类型和目标类型,并且有一个接收多于一个参数的函数,那么它会在一个步骤中完成从一种类型到另外一种类型的转换并应用一个长度转换。如果没有这样的项,使用一个类型修饰符的转换涉及两个步骤,一个是在数据类型之间转换,另外一个是应用修饰符。

报告文档问题

阅读 上游文档. 通过 PostgreSQL 文档反馈表单.