pg_cast

pg_cast

pg_cast表存储数据类型转换路径,包括内置路径和用CREATE CAST定义的路径。

请注意,pg_cast不代表系统已知的每种类型转换,只代表那些无法从某些通用规则推导出的转换。 例如,在pg_cast中未显式表示域与其基类型之间的转换。 另一个重要的例外是“自动I/O转换强制转换”,使用数据类型自己的I/O函数执行转换为文本或其他字符串类型的那些,在pg_cast中没有显式表示。

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

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

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

Table 1. pg_catalog.pg_cast
类型 参考 描述
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 - 这些类型是二进制可强制的,不需要转换。