Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

51.10. pg_cast #

目录 pg_cast 存储数据类型转换路径(内置和用户自定义)。

需要特别注意,pg_cast 不能表示系统能执行的每种类型转换,只有不能从某些通用规则推导出来的转换。pg_cast 中不会明确显示域与其基础类型之间的转换。另一个重要的例外是,“自动 I/O 转换转换”,这些转换使用数据类型自己的 I/O 函数来转换到或从 text 或其他字符串类型,在 pg_cast 中不作明确表示。

表 51.10. pg_cast

列类型

描述

oid oid

行标识符

castsource oid(引用 pg_type.oid

源数据类型的 OID

casttarget oid(引用 pg_type.oid

目标数据类型的 OID

castfunc oid(引用 pg_proc.oid

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

castcontext char

指示转换可以在哪些上下文中调用。e 表示只可作为显式转换(使用 CAST:: 语法)。a 表示可隐式用于目标列分配,以及显式使用。 i 表示可隐式用于表达式中,以及其他情况。

castmethod char

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


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

如果关联函数接受多个参数,则创建源类型和目标类型都相同的 pg_cast 条目是合法的。此类条目表示 长度强制转换函数,它强制转换该类型的数值对特定类型修饰符值合法。

pg_cast 条目具有不同的源类型和目标类型,以及一个接受多个参数的函数时,它表示将从一种类型转换为另一种类型并在单步中应用长度强制转换。当没有此类条目可用时,强制转换到使用类型修饰符的类型涉及两个步骤,一个用于在数据类型之间转换,另一个用于应用修饰符。