pg_cast #目录 pg_cast 存储数据类型转换路径,包括内置和用户定义的。
应该注意的是,pg_cast 并不代表系统知道如何执行的每一种类型转换;只包含那些不能从某种通用规则推导出来的。例如,在域和其基本类型之间的转换并未在 pg_cast 中显式表示。另一个重要的例外是,“自动 I/O 转换转换”,即使用数据类型自身的 I/O 函数来转换为 text 或其他字符串类型(反之亦然)的转换,并未在 pg_cast 中显式表示。
表 52.10. pg_cast 列
|
列 类型 描述 |
|---|
|
行标识符 |
|
源数据类型的 OID |
|
目标数据类型的 OID |
|
用于执行此转换的函数的 OID。如果转换方法不需要函数,则存储零。 |
|
指示可以在哪些上下文中调用转换。 |
|
指示转换是如何执行的。 |
pg_cast 中列出的转换函数必须始终将转换源类型作为其第一个参数类型,并将转换目标类型作为其结果类型。转换函数最多可以有三个参数。第二个参数(如果存在)必须是 integer 类型;它接收与目标类型相关的类型修饰符,如果不存在则为 -1。第三个参数(如果存在)必须是 boolean 类型;如果转换是显式转换,则为 true,否则为 false。
如果 pg_cast 条目中的源类型和目标类型相同,并且关联的函数有多个参数,这是合法的。此类条目表示 “长度强制转换函数”,用于将类型的值强制转换为特定类型修饰符值可接受的范围。
当 pg_cast 条目具有不同的源类型和目标类型,并且函数有多个参数时,它表示一步完成了从一种类型到另一种类型的转换以及应用长度强制转换。当没有此类条目可用时,强制转换为使用类型修饰符的类型涉及两个步骤:一个步骤在数据类型之间进行转换,第二个步骤应用类型修饰符。