返回介绍

I. 教程

II. SQL 语言

III. 服务器管理

IV. 客户端接口

V. 服务器端编程

VI. 参考手册

VII. 内部

VIII. 附录

10.4. 值存储

发布于 2019-09-30 03:06:34 字数 1205 浏览 1007 评论 0 收藏 0

要插入表中的数值也根据下面的步骤转换成目标列的数据类型。

值存储数据类型解析

  1. 查找与目标字段准确的匹配。

  2. 试着将表达式直接转换成目标类型。如果已知这两种类型之间存在一个已注册的转换函数,那么直接调用该转换函数即可。如果表达式是一个未知类型文本,该文本字符串的内容将交给目标类型的输入转换过程。

  3. 检查一下看看目标类型是否有长度转换。长度转换是一个从某类型到自身的转换。如果在 pg_cast 表里面找到一个,那么在存储到目标字段之前先在表达式上应用。这样的转换函数总是接受一个额外的类型为 integer 的参数,它接收目标字段的声明长度(实际上是其 atttypmod 值,atttypmod 的解释随不同的数据类型而不同)。转换函数负责施加那些长度相关的语义,比如长度检查或者截断。

例10-6. character 存储类型转换

对一个目标列定义为 character(20) 的语句,下面的语句确保存储值的长度正确:

CREATE TABLE vv (v character(20));
INSERT INTO vv SELECT 'abc' || 'def';
SELECT v, length(v) FROM vv;

          v           | length
----------------------+--------
 abcdef               |     20
(1 row)

这里真正发生的事情是两个 unknown 文本缺省解析成 text ,这样就允许 || 操作符解析成 text 连接。然后操作符的 text 结果转换成 bpchar("空白填充的字符型",character 类型内部名称)以匹配目标字段类型。不过,因为知道 textbpchar 是二进制兼容的,这样的转换是隐含的并且实际上不做任何函数调用。最后,在系统表里找到长度转换函数 bpchar(bpchar, integer) 并且应用于该操作符的结果并存储字段长。这个类型相关的函数执行所需的长度检查和额外的空白填充。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文