10.4. 值存储

将被插入到一个表的值会按照下列步骤被转换到目标列的数据类型。

值存储类型转换

  1. 检查一个与目标的准确匹配。

  2. 否则,尝试转换表达式为目标类型。如果在两种类型之间的一个 赋值造型已经被注册在pg_cast 目录(见CREATE CAST)中, 这是可能的。或者,如果该表达式是一个未知类型的文字, 则该文字串的内容将被提供给目标类型的输入转换例程。

  3. 检查是否有一个用于目标类型的尺寸调整造型。尺寸调整造型是一个从该类型到其自身的造型。 如果在pg_cast目录中找到一个,那么把表达式存储到目标列中之前把它应用到表达式。这样一个造型的实现函数总是采用一个额外的integer类型的参数,它接收目标列的atttypmod值(通常是它被声明的长度,尽管对于不同数据类型atttypmod有不同的解释),并且它可能采用第三个boolean参数来说明造型是显式的还是隐式的。该造型函数负责应用任何长度相关的语义,例如尺寸检查或截断。

例 10.8. character存储类型转换

对于一个声明为character(20)的目标列,下面的语句展示了被存储的值如何被正确地调整尺寸:

CREATE TABLE vv (v character(20));
INSERT INTO vv SELECT 'abc' || 'def';
SELECT v, octet_length(v) FROM vv;v           | octet_length
----------------------+--------------abcdef               |           20
(1 row)

实际发生的事情是两个未知文字被默认决定为text,允许||操作符被决定为text连接。 然后操作符的text结果被转换成bpchar(“blank-padded char”空白填充字符,character数据类型的内部名称)来匹配目标列类型(由于从textbpchar的转换是二进制强制的,这个转换不会插入任何实际的函数调用)。最后,尺寸调整函数bpchar(bpchar, integer, boolean)被从系统目录中找到并应用到操作符的结果和存储的列长度上。这个类型相关的函数执行必要的长度检查并增加填充的空间。

本文转自PostgreSQL中文社区,原文链接:10.4. 值存储

PostgreSQL 10.1 手册_部分 II. SQL 语言_第 10 章 类型转换_10.4. 值存储相关推荐

  1. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 8 章 数据类型_8.6. 布尔类型

    8.6. 布尔类型 PostgreSQL提供标准的SQL类型boolean,参见表 8.19.boolean可以有多个状态:"true(真)"."false(假)&quo ...

  2. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.23. 行和数组比较

    9.23. 行和数组比较 9.23.1. IN9.23.2. NOT IN9.23.3. ANY/SOME (array)9.23.4. ALL (array)9.23.5. 行构造器比较9.23.6 ...

  3. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 14 章 性能提示_14.1. 使用EXPLAIN

    14.1. 使用EXPLAIN 14.1.1. EXPLAIN基础 14.1.2. EXPLAIN ANALYZE 14.1.3. 警告 PostgreSQL为每个收到查询产生一个查询计划. 选择正确 ...

  4. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.4. 字符串函数和操作符...

    9.4. 字符串函数和操作符 9.4.1. format 本节描述了用于检查和操作字符串值的函数和操作符.在这个环境中的串包括所有类型character.character varying和text的 ...

  5. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 8 章 数据类型_8.10. 位串类型

    8.10. 位串类型 位串就是一串 1 和 0 的串.它们可以用于存储和可视化位掩码.我们有两种类型的 SQL 位类型:bit(n)和bit varying(n),其中 n是一个正整数. bit类型的 ...

  6. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 12 章 全文搜索_12.4. 额外特性

    12.4. 额外特性 12.4.1. 操纵文档12.4.2. 操纵查询12.4.3. 用于自动更新的触发器12.4.4. 收集文档统计数据 这一节描述在文本搜索中有用的一些额外的函数和操作符. 12. ...

  7. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 5 章 数据定义_5.11. 外部数据

    5.11. 外部数据 PostgreSQL实现了部分的SQL/MED规定,允许我们使用普通SQL查询来访问位于PostgreSQL之外的数据.这种数据被称为外部数据(注意这种用法不要和外键混淆,后者是 ...

  8. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.15. JSON 函数和操作符...

    9.15. JSON 函数和操作符 表 9.43展示了可以用于两种 JSON 数据类型(见第 8.14 节)的操作符. 表 9.43. json和jsonb 操作符 操作符 右操作数类型 描述 例子 ...

  9. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 5 章 数据定义_5.5. 修改表

    5.5. 修改表 5.5.1. 增加列5.5.2. 移除列5.5.3. 增加约束5.5.4. 移除约束5.5.5. 更改列的默认值5.5.6. 修改列的数据类型5.5.7. 重命名列5.5.8. 重命 ...

最新文章

  1. RK3288 双屏异显,两屏默认方向不一致
  2. RabbitMQ 3.6 安装
  3. ActiveRecord教程
  4. java 取对象的类_Java中通过Class类获取Class对象的方法详解
  5. 如何判断车与路边线距离_一声惊雷!开车怎么判断轮胎的位置呢?驾校教练:简单一招就能看到位置!...
  6. ros中web端通过 按钮加载本地静态 pgm 地图显示在canvas画布中
  7. 通用采集器Modbus协议应用
  8. 181016扇贝有道词霸每日一句
  9. vue中点击,将内容复制到剪贴板
  10. Embedding Projector
  11. JPA学习笔记之接口JpaRepository 和 JpaSpecificationExecutor的简单使用
  12. 集成电路ic是什么?
  13. SCI-15种投稿状态
  14. C++中的引用变量详解
  15. PHP如何解决swoole守护进程Redis假死 ,mysql断线重连问题?
  16. 谈Java语言规范之枚举类型
  17. 清晨为何不能空腹喝蜂蜜水
  18. centos7 gam_server进程导致CPU使用率100%,系统负载很高
  19. Element 组件之 右键鼠标 自定义菜单
  20. 1579. 保证图可完全遍历

热门文章

  1. RedHat 6编译升级vsftpd
  2. jenkins如何在一台机器上开启多个slave
  3. HDU2255 奔小康赚大钱(km模板题)
  4. myeclipse6.0下载及注冊码
  5. svm理论与实验之11:svm开发工具包LibSVM
  6. 让你不再害怕指针(一)
  7. HDU - 6438(贪心+思维)
  8. 禅道8.2.4 腾讯云迁移至VM
  9. Redis在windows下的安装
  10. Ubuntu 13.10下安装ns2 2.35遇到的小问题