pg_cast
pg_cast
表存储数据类型转换路径,包括内置路径和用CREATE CAST
定义的路径。
pg_cast
中列出的造型函数必须始终以造型的源类型作为其第一个参数类型,并且返回造型的目标类型作为其结果类型。造型函数最多可以有三个参数。第二个参数如果存在,必须是整数
类型,它接受与目标类型相关的类型修饰符;如果没有,则返回-1
。第三个参数如果存在,必须是布尔
类型;如果转换是显式的,则为true
,否则为false
。
如果关联函数不止一个参数,则创建一个源和目标类型相同的pg_cast
项是合法的。这种项表示“长度强制函数”,它们能把该类型的值强制为对特定类型修饰符值合法的值。但是注意,目前不支持将非默认类型修饰符和用户创建的数据类型相关联,因此该功能仅适用于少量类型修饰符被内置在语法中的内建类型。
当pg_cast
项具有不同的源和目标类型,并且具有多个参数的函数时,它表示从一种类型转换为另一种类型,并在一个步骤中应用长度强制。当没有这样的项可用时,使用类型修饰符强制到一种类型需要两个步骤,第一个用于在数据类型之间的转换,第二个应用修饰符。
表 1. pg_catalog.pg_cast
列 | 类型 | 参考 | 描述 |
---|---|---|---|
castsource |
oid | pg_type.oid | 源数据类型的OID |
casttarget |
oid | pg_type.oid | 目标数据类型的OID |
castfunc |
oid | pg_proc.oid | 用于执行此造型的函数的OID,如果数据类型是二进制兼容的(即不需要运行时操作来执行造型)则存储0。 |
castcontext |
char | 指示应该在什么上下文中调用造型。e 表示只能作为显式造型(使用CAST 或者:: 语法)。a 意味着隐式或者显式地为目标列赋值。i 表示隐式地用在表达式以及其他情况中。 |
上级话题: 系统目录定义