52.10. pg_cast

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

应该注意的是,pg_cast并不代表系统知道如何执行的每种类型转换。只有那些不能从某种通用规则中推论出来的。例如,在域及其基本类型之间的转换未在pg_cast中明确表示。另一个重要的 exception 是,“自动 I/O 转换强制转换”(未使用pg_cast明确表示)是使用数据类型自己的 I/O 函数在text或其他字符串类型之间进行转换的。

表 52.10. pg_cast

NameTypeReferencesDescription
oidoid 行标识符(隐藏属性;必须显式选择)
castsourceoidpg_type.oid源数据类型的 OID
casttargetoidpg_type.oid目标数据类型的 OID
castfuncoidpg_proc.oid用于执行此强制转换的函数的 OID。如果强制转换方法不需要函数,则存储零。
castcontextchar 指示可以在其中调用转换的上下文。e仅表示为显式转换(使用CAST::语法)。 a意味着在隐式分配给目标列以及显式。 i和其他情况一样,在表达式中隐式表示。
castmethodchar 指示执行转换的方式。 f表示使用castfunc字段中指定的功能。 i表示使用 Importing/输出功能。 b表示类型是二进制强制的,因此不需要转换。

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

如果关联函数接受多个参数,则在源和目标类型相同的情况下创建pg_cast条目是合法的。这样的条目表示“长度强制函数”,其强制类型的值对特定类型修饰符值合法。

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