PostgreSQL 中文参考文档
🌐 英文原版 官方 ↗

52.10. pg_cast #

目录 pg_cast 存储内建的和用户定义的数据类型转换路径。

应当注意,pg_cast 并不表示系统知道如何执行的 每一种类型转换;它只表示那些无法从某些通用规则推导出来的转换。 例如,域与其基类型之间的转换在 pg_cast 中没有显式表示。另一个重要的例外是“自动 I/O 转换造型” —— 即使用数据类型自身的 I/O 函数与 text 或其他字符串类型 之间进行的转换 —— 它们在 pg_cast 中也没有显式表示。

Table 52.10. \1 字段列说明

Column Type

Description

oid oid

Row identifier

castsource oid (references pg_type.oid)

源数据类型的 OID

casttarget oid (references pg_type.oid)

目标数据类型的 OID

castfunc oid (references pg_proc.oid)

用于执行该转换的函数的 OID。如果该转换方法不需要函数, 则存储零。

castcontext char

指示可以在哪些上下文中调用该转换。 e 表示只能作为显式转换 (使用 CAST 或 :: 语法)。 a 表示在向目标列赋值时隐式进行,也可以显式进行。 i 表示在表达式中隐式进行,并且包括其他情况。

castmethod char

指示转换的执行方式。 f 表示使用 castfunc 字段指定的函数。 i 表示使用输入/输出函数。 b 表示这些类型是二进制可强转的, 因而不需要任何转换。


pg_cast 中列出的转换函数必须始终以转换源类型 作为其第一个参数类型,并返回转换目标类型作为其结果类型。 转换函数最多可以有三个参数。第二个参数(如果存在) 必须是 integer 类型;它接收与目标类型关联的类型修饰符, 如果没有则为 -1。第三个参数(如果存在) 必须是 boolean 类型;如果该转换是显式转换, 它接收 true,否则接收 false。

创建一个源类型与目标类型相同的 pg_cast 条目是合法的,前提是关联函数接收多于一个参数。 这样的条目表示“长度强制转换函数”, 用于把该类型的值强制转换为对特定类型修饰符值合法的形式。

当 pg_cast 条目具有不同的源类型和目标类型、 且其函数接收多于一个参数时,它表示一步完成从一种类型到另一种类型的转换 并应用长度强制转换。当没有这样的条目可用时, 向使用类型修饰符的类型强制转换需要两步: 一步在数据类型之间转换,另一步应用修饰符。