# 52.10.pg_cast

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

应当指出的是pg_cast不代表系统知道如何执行的每个类型转换;只有那些不能从一些通用规则中推导出来的。例如,域和它的基类型之间的转换没有明确表示在pg_cast.另一个重要的例外是“自动 I/O 转换强制转换”,即使用数据类型自己的 I/O 函数执行的转换。文本或其他字符串类型,未在pg_cast.

表 52.10.pg_cast

列类型

描述
样的 样的

行标识符
castsource 样的(参考pg_type.样的)

源数据类型的 OID
施法目标 样的(参考pg_type.样的)

目标数据类型的 OID
转换函数 样的(参考pg_proc.样的)

用于执行此转换的函数的 OID。如果 cast 方法不需要函数,则存储零。
演员表 字符

指示可以在哪些上下文中调用强制转换。e仅表示作为显式强制转换(使用投掷要么::句法)。一种意味着隐含地分配给目标列,以及显式地。一世隐含在表达式中,以及其他情况。
铸造法 字符

指示如何执行转换。f意味着在指定的功能转换函数使用字段。一世表示使用输入/输出功能。b意味着类型是二进制可强制的,因此不需要转换。

中列出的强制转换函数pg_cast必须始终将转换源类型作为其第一个参数类型,并将转换目标类型作为其结果类型返回。一个强制转换函数最多可以有三个参数。第二个参数(如果存在)必须是 type整数;它接收与目标类型关联的类型修饰符,如果没有,则接收 -1.第三个参数(如果存在)必须是 type布尔值;它收到真的如果演员表是显式演员表,错误的除此以外。

创建一个是合法的pg_cast如果关联函数采用多个参数,则源类型和目标类型相同的条目。这样的条目表示“长度强制函数”,它强制类型的值对于特定类型修饰符值是合法的。

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