设为首页 收藏本站
查看: 1028|回复: 0

[经验分享] Postgresql中的dataType

[复制链接]

尚未签到

发表于 2016-11-21 09:12:14 | 显示全部楼层 |阅读模式
  1.整数类型
  smallint(int2)  2bytes
  integer(int,int4) 4bytes
  bigint(int8)  8bytes
  2.任意精度数值
  numeric(precision,scale),用于精确的货币和科学计算。
  eg:23.5141,precision=6,scale-4
  如果指定,precision最大值为1000,如果numeric中没有指定precious,小数点前最多有131072个数字,小数点后最多有16383个数字。
  如果插入的数值大于(precision-scale)的平方值,会报错如果插入的数值的小数位数多余scale,则会四舍五入。
  numeric物理存储上类似于varchar(n),每4个十进制数字2个bytes,再加上5到8个bytes的额外开销。
  3.浮点类型(非精确的数值类型)
  real和double precision不适合做精确的存储和计算。太大或太小的数字都会引发错误。
  real :1E-37~1E+37,precision>=6,4bytes
  double precision:1E-307~1E+308,precision>=15,8bytes
  float(precision):float(1)~float(24)=real,float(25)~float(53)=double precision,
  float=double precision
  4.序列号类型(正整数,从1开始)
  serial、bigserial不是真正的类型,只是为唯一标识列提供方便,类似AUTO_INCREMENT property

DSC0000.gif DSC0001.gif View Code  insert into tablename values(nextval(’tablename_colname_seq’)) = insert into tablename values(default)
  serial=serial4,创建integer列。bigserial=serial8,创建bigint列。
  5.monetary类型
  money:8bytes  小数精度是由postgresql.conf中的lc_monetary的值配置。values of numeric,int和 bigint可以被转换成money,real和double precision先被转换成numeric,不过这种方式并不推荐。
  6.字符类型
  varchar(n):有长度限制,超过长度报错,除非超出的字符是空白.varchar不带length,则不限长
  char(n):固定长度,空白补齐。char=char(1)。
  text:不限长。最长的可能字符串大概是1GB左右。
  在postgresql中的char(n)通常在三个当中最慢的,因为需要读取空白字符的额外开销。一般应该使用varchar或text
  7.bytea
  hex format:将二进制数据编码为每字节两位十六进制数据,整条字符串以\x开头。这种模式能够和很多外部应用程序和协议兼容,转换比“escape format”快。例如:
  test=# select E'\\000'::bytea;
bytea
-------
\x00
(1 行)
  escape format:是postgresql传统的格式。是用ASCII字符序列来表示二进制串的方法,同时把那些无法表示成ASCII字符的二进制串转换成逃逸序列。
  test=# select E'\\000'::bytea;
  bytea
-------
\000
(1 行)
  输出格式是在postgresql.conf中配置bytea_output,默认是hex,输入两种格式都支持。
  8.Date/Time类型
  语法格式:type[(p)] 'value'
  date input:如1999-01-08是ISO 8601标准格式,是推荐的格式
  time input: 如04:05:06.789是ISO 8601标准格式,是推荐的格式
  timeZone input:如PST 太平洋标准时间,-8:00:ISO-8601 offset for PST
  timestamps:如1999-01-08 04:05:06 -8:00,January 8 04:05:06 1999 PST
  interval:时间间隔类型,通过postgresql.conf的intervalstyle调整,或通过set intervalstyle,默认值为postgresql,可设置成sql_standard或iso_8601或postgres_verbose。
  9.boolean类型
  TRUE/'t'/'true'/'y'/'yes'/'on'/'1'
  FALSE/'f'/'false'/'n'/'no'/'off'/'0'
  10.枚举类型
  先定义,然后再用于表或函数的定义中。
  排序的顺序是按照定义的顺序进行比较。
  一个枚举类型占4个字节。大小写敏感。空格是有意义的。
  从内部枚举值到文本标签的翻译是保存在系统目录pg_enum中,可以直接查询这个catalog。
  11.arrays
  可以申明一维或多维的数组,也可以申明长度或不申明长度,实际上声明维度或长度都不会影响到运行,和没有申明维度或长度的数组是一样的。这点可以通过psql下的\d tb查看。
  注意:a.插入多维数组的时候,每个子数组的维数要一致。
  b. 数组元素周围可以用双引号,当元素值中包含逗号或花括弧,则必须加双引号。
  如:test=# update tb2 set strarr='{"fds}",fdsf}' where unicol=6;"fds}"此值如果不加引号则会报错。
  c. 用ARRAY时,数组字符串元素要用单引号包围,不能用双引号。
  如:test=# update tb2 set strarr=array['fsd','ppp'] where unicol=6;
        d. 默认情况下访问数组时,数组的小标从1开始。即:array[1]~array[length]。当数组下界不等于1时,数组输出程序才在结果中包含明确的尺寸。
  e.为了避免和非片段实例混淆,最好对所有的位数使用片段语言,[1:2][1:1],而不是  [2][1:1].
  f.通过给尚不存在的数组元素赋值的方法来扩大数组,所有位于原数组最后一个元素和这个新元素之间的未赋值元素将设为NULL
  12.复合类型
  类似于c中的结构体,java中的javabean。是由一组字段名和类型组成。
  注意:复合类型声明中没有约束。
  为了增强sql文的可读性,可以用到Row关键字。如:ROW(’fuzzy dice’, 42, 1.99)作为某个复合类型的值插入table。
  如:
  test=# create type inventory_item as (name text,sid int);
CREATE TYPE
test=# create table on_hand(item inventory_item);
CREATE TABLE
test=# insert into on_hand values(row('fkdsa',45));
INSERT 0 1
  查找复合类型的列:select (item).name from on_hand;(如果item已经是表明的情况下,使用括号)
  更新复合类型的列:test=# update on_hand set item.sid = (item).sid+1;(不需要再set后面出现的字段名加括号,但是在等号右边的表达式中引用同一个字段的时候却需要括号。)
  13.对象标识类型
  无符号4bytes,不建议作为用户表的主键,一般用作系统表的主键。
  14.伪类型
  伪类型不能作为列的类型。能被用来声明function的参数或结果集的类型。
  注意:美元符界定字符串常量比单引号语法更有用,因为在单引号语法表示常量的过程中,如果字符串字面量中包含反斜杠,则每个反斜杠必须写4个,因为在作为字符串文本分析的时候会减少两个,在函数执行时在内层字符串常量里面会再次被解析一个。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-303230-1-1.html 上篇帖子: PostgreSQL的hstore初步学习 下篇帖子: PostgreSQL 错误码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表