2024年9月26日: PostgreSQL 17 发布!
支持的版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:devel
不支持的版本:11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3

51.10. pg_cast #

目录pg_cast存储数据类型转换路径,包括内置和用户定义的路径。

需要注意的是,pg_cast并不表示系统知道如何执行的每种类型转换;仅表示那些不能从某些通用规则推断出的转换。例如,域与其基本类型之间的转换在pg_cast中没有显式表示。另一个重要的例外是,“自动I/O转换转换”(使用数据类型自己的I/O函数转换为或从text或其他字符串类型转换),在pg_cast中没有显式表示。

表 51.10. pg_cast

列 类型

描述

oid oid

行标识符

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条目具有不同的源类型和目标类型以及一个接受多个参数的函数时,它表示在一步中从一种类型转换为另一种类型并应用长度强制。当没有此类条目可用时,强制转换为使用类型修饰符的类型涉及两个步骤,一个用于在数据类型之间转换,另一个用于应用修饰符。

提交更正

如果您在文档中发现任何不正确的内容,与您对特定功能的体验不符,或者需要进一步澄清,请使用此表单报告文档问题。