pg_cast

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表示隐式地用在表达式以及其他情况中。