pg_cast #
目录pg_cast存储数据类型转换路径,包括内置的和用户定义的类型。
需要注意的是,pg_cast并不表示系统知道如何执行的所有类型转换,它只包括那些不能从某些普通规则推导出的转换。例如,一个域及其基类型之间的转换并未显式地在pg_cast中展示。另一个重要的例外是“自动 I/O 转换造型”,它们通过数据类型自己的 I/O 函数来转换成(或者转换自)text或其他字符串类型,这些转换也没有显式地在pg_cast中表示。
表 52.10. pg_cast 列
列类型 描述 |
|---|
行标识符 |
源数据类型的 OID |
目标数据类型的 OID |
执行该转换的函数的OID。如果该转换方法不需要函数,则存储0。 |
指示该转换能被调用的环境。
|
指示转换如何被执行。
|
在pg_cast里列出的类型转换函数必须总是以转换的源类型作为它的第一个参数类型,并且返回转换的目标类型作为它的结果类型。一个类型转换函数最多有三个参数。如果出现了第二个参数,必须是integer类型;它接受与目标类型关联的修饰词,如果没有,就是-1。如果出现了第三个参数,那么必须是boolean类型;如果该类型转换是一种显式转换,那么它接受true,否则接受false。
在pg_cast里创建一条源类型和目标类型相同的记录是合理的,只要相关联的函数接受多个参数。这样的记录代表“长度转换函数”,它们把该类型的值转换为对特定的类型合法的值。
如果一个pg_cast的项有着不同的源类型和目标类型,并且有一个接收多个参数的函数,那么它会在一个步骤中完成从一种类型到另一种类型的转换并应用一个长度转换。如果没有这样的项,使用一个类型修改器的转换涉及两个步骤,一个是在数据类型之间转换,另一个是应用修改器。