↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 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.1 已结束支持。 请参阅 当前版本手册.

5.4. 查询目标 #

查询目标类型解析

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

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

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

5.4.1. 示例

5.4.1.1. varchar 存储

对于声明为 varchar(4) 的目标列,下面的查询确保目标的大小正确:

tgl=> CREATE TABLE vv (v varchar(4));
CREATE
tgl=> INSERT INTO vv SELECT 'abc' || 'def';
INSERT 392905 1
tgl=> SELECT * FROM vv;
  v
------
 abcd
(1 row)

这里真正发生的是:两个未知字面量默认被解析成 text,使 || 运算符被解析为文本串接。然后运算符的文本结果被强制转换成 varchar 以匹配目标列类型。(但由于解析器知道 text 和 varchar 二进制兼容,这个强制转换是隐式的,不会插入任何真实的函数调用。)最后,在系统目录中找到尺寸调整函数 varchar(varchar,int4),应用到操作符的结果和存储的列长度上。这个类型特定的函数执行所需的截断。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.