Skip to content

53.10.pg_cast#

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

应该注意的是,pg_cast并不表示系统知道如何执行的每种类型转换;仅表示那些无法从某些通用规则中推导出来的转换。例如,在pg_cast中没有明确表示域与其基本类型之间的转换。另一个重要的例外是,“自动 I/O 转换转换”,即使用数据类型自己的 I/O 函数执行的转换,用于将text或其他字符串类型转换为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。如果转换方法不需要函数,则存储为零。

castcontext char

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

castmethod char

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

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

如果关联函数采用多个参数,则在pg_cast中创建源类型和目标类型相同的条目是合法的。此类条目表示“长度强制转换函数”,用于将类型的数值强制转换为特定类型修饰符值所允许的合法值。

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