↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 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 / 7.2 / 7.1
历史版本PostgreSQL 7.2 已于 2007 年 2 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

5.5. 查询目标 #

要插入表的值按下列 步骤强制转换为目标列的 数据类型。

查询目标类型解析

  1. 检查是否与目标类型精确匹配。

  2. 否则,尝试把表达式强制转换成目标类型。如果两个 类型已知二进制兼容,或者存在转换 函数,转换就会成功。如果表达式是未知类型的字面量,就把 字面字符串的内容送给目标类型的 输入转换例程。

  3. 如果目标是定长类型(例如声明了长度的 char 或 varchar), 则尝试为目标类型寻找一个尺寸调整函数。尺寸调整函数是一个与类型 同名的函数, 接受两个参数,第一个是该类型,第二个是 integer,并返回同一类型。如果找到了这样的函数,就应用它, 把列的声明长度作为第二个参数传递。

例 5.6. character 的存储类型转换

对于声明为 character(20) 的目标列,下面的查询 确保目标的大小被正确调整:

tgl=> CREATE TABLE vv (v character(20));
CREATE
tgl=> INSERT INTO vv SELECT 'abc' || 'def';
INSERT 392905 1
tgl=> SELECT v, length(v) FROM vv;
          v           | length
----------------------+--------
 abcdef               |     20
(1 row)

这里实际发生的是:两个未知字面量默认被解析为 text,使 || 操作符被 解析为 text 连接。然后操作符的 text 结果被强制转换为 bpchar(“blank-padded char”,字符数据类型的内部名)以匹配目标 列类型。(由于解析器知道 text 和 bpchar 二进制兼容,这个转换是隐式的,不会 插入任何真实的函数调用。)最后,在系统目录中找到尺寸调整函数 bpchar(bpchar, integer), 应用到操作符的结果和存储的列长度上。这个 类型特定的函数执行所需的长度检查并添加 填充空格。


提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。