共计 838 个字符,预计需要花费 3 分钟才能阅读完成。
要插入表中的数值也依据上面的步骤转换成指标列的数据类型。
值存储数据类型解析
- 查找与指标精确的匹配。
- 否则,试着将表达式间接转换成指标类型。如果已知这两种类型之间存在一个已注册的转换函数,那么间接调用该转换函数即可。如果表达式是一个未知类型文本,该文本字符串的内容将交给指标类型的输出转换过程。
- 检查一下看看指标类型是否有长度转换。长度转换是一个从某类型到本身的转换。如果在 pg_cast 表外面找到一个,那么在存储到指标列之前先在表达式上利用。这样的转换函数总是承受一个额定的类型为 integer 的参数,它接管指标字段的 atttypmod 值 (实际上是其申明长度,atttypmod 的解释随不同的数据类型而不同),并且它可能承受一个 boolean 类型的第三个参数,示意转换是显式的还是隐式的。转换函数负责施加那些长度相干的语义,比方长度查看或者截断。
例.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)
这里真正产生的事件是两个 unknown 文本缺省解析成 text,这样就容许 || 操作符解析成 text 连贯。而后操作符的 text 后果转换成 bpchar(“空白填充的字符型”,character 类型外部名称)以匹配指标列类型。(因为从 text 到 bpchar 的转换是二进制兼容的,这样的转换是隐含的并且实际上不做任何函数调用。)最初,在零碎表里找到长度转换函数 bpchar(bpchar, integer, boolean) 并且利用于该操作符的后果和存储的字段长。这个类型相干的函数执行所需的长度检查和额定的空白填充。
正文完
发表至: oushuDB-HAWQ
2021-12-22