2025年9月25日: PostgreSQL 18 发布!
支持的版本: 当前 (18) / 17 / 16 / 15 / 14 / 13
开发版本: devel
不支持的版本: 12 / 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

52.10. pg_cast #

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

应该注意的是,pg_cast 并不代表系统知道如何执行的每一种类型转换;只包含那些不能从某种通用规则推导出来的。例如,在域和其基本类型之间的转换并未在 pg_cast 中显式表示。另一个重要的例外是,“自动 I/O 转换转换”,即使用数据类型自身的 I/O 函数来转换为 text 或其他字符串类型(反之亦然)的转换,并未在 pg_cast 中显式表示。

表 52.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 条目具有不同的源类型和目标类型,并且函数有多个参数时,它表示一步完成了从一种类型到另一种类型的转换以及应用长度强制转换。当没有此类条目可用时,强制转换为使用类型修饰符的类型涉及两个步骤:一个步骤在数据类型之间进行转换,第二个步骤应用类型修饰符。

提交更正

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