Postgresql 中文操作指南
53.10. pg_cast #
目录 pg_cast 存储数据类型转换路径,包括内置和用户定义的路径。
应该注意的是,pg_cast 并不表示系统知道如何执行的每种类型转换,仅表示不能从某些通用规则推断出的类型转换。例如,在 pg_cast 中没有明确表示在域及其基本类型之间进行转换。另一个重要的例外是,“自动 I/O 转换转换”(使用数据类型自己的 I/O 函数执行转换以从 text 或其他字符串类型转换到 text 或其他字符串类型)在 pg_cast 中没有明确表示。
Table 53.10. pg_cast Columns
Column Type Description |
oid oid Row identifier |
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 条目具有不同的源类型和目标类型并且函数采用多个参数时,它表示单步从一种类型转换为另一种类型并应用长度强制转换。当没有这样的条目时,强制转换为使用类型限定符的类型涉及两个步骤,一个步骤在数据类型间进行转换,另一个步骤应用限定符。