`

Postgre常用数据类型二

 
阅读更多

全文索引

   tsvector  tsvector[] tsquery tsquery[]

 

日期

   1.inverval的输入格式如下:

     [@] quantity unit [quantity unit...] [direction] 或者 P [ years-months-days ] [ T hours:minutes:seconds ]

     其中@标记是可选的,quantity是一个数字。

     unit可以是microsecond,millisecond,second, minute,hour,day,week, month,year,decade,century,millennium或这些单位的缩写或复数。

     direction可以是ago或为空。 

     第一种格式例如:'1 day 12 hours 59 min 10 sec' 或者省略单位'1-3 3 4:05:06' 。第二种格式如:P0001-02-03T04:05:06 或者P1Y2M3DT4H5M6S。

        

   2.关于abstime:

     abstime和reltime类型是低分辨率类型, 它们被用于系统内部。我们反对你使用这些类型, 因为这些旧类型的部分或全部可能会在未来的版本里消失。 

     具体格式类似 timestamp [ (p) ] with time zone

 

   

名字 存储空间 输出格式 描述 最低值 最高值 精度
timestamp [ (p) ] [ without time zone ] 8字节
2003-04-12 04:05:06.123457
日期和时间(无时区) 4713 BC 294276 AD 1微秒/14位
timestamp [ (p) ] with time zone 8字节 2003-04-12 16:05:06.123457+08 日期和时间,带时区  4713 BC 294276 AD 1微秒/14位
date 4字节 1999-01-08 00:00:00 只用于日期 4713 BC 5874897 AD 1天
time [ (p) ] [ without time zone ] 8字节 04:05:06.123457 只用于时间 00:00:00 24:00:00 1微秒/14位
time [ (p) ] with time zone 12字节 04:05:06.123457-04

时间带时

区末位四舍五入

00:00:00+1459 24:00:00-1459 1微秒/14位
interval [ fields ] [ (p) ] 12字节 2 years 3 mons 1 day 12:59:10 时间间隔 -178000000年 178000000年 1微秒/14位
abstime   2003-04-12 16:05:06+08 日期和时间带时区      

 

    

 

几何类型

  

名字 存储空间 说明 表现形式
point 16字节 平面中的点 (x,y)
line 32字节 (无穷)直线(未完全实现) ((x1,y1),(x2,y2))
lseg 32字节 (有限)线段 ((x1,y1),(x2,y2))
box 32字节 矩形 ((x1,y1),(x2,y2))
path 16+16n字节 闭合路径(与多边形类似 ((x1,y1),...)
path 16+16n字节 开放路径 [(x1,y1),...]
polygon 40+16n字节 多边形(与闭合路径相似) ((x1,y1),...)
circle 24字节 <(x,y),r> (圆心和半径)

 

  

网络地址

 inet类型:

   该类型的输入格式是address/y, 这里的address是IPv4或者IPv6地址, y是子网掩码的二进制位数。 如果/y部分未填, 则子网掩码对IPv4而言是32,对IPv6而言是128。

   所以该值表示只有一台主机。显示时,如果该值表示只有一台主机, /y将不会显示。 示例:'::10.2.3.4/4'或者'192.168.1.100'或者'::10.2.3.4'

 

名字 存储空间 s 描述
cidr 7或19字节   IPv4或IPv6网络
inet 7或19字节   IPv4 或 IPv6 网络和主机
macaddr 6字节   MAC 地址

   

uuid

   1.如果字段指定了该类型,不填写的话默认不会自动生成uuid,需要填写uuid格式的字符串。

   2.UUID被写成一个小写十六进制数字的序列,由分字符分成几组,特别是一组8位数字+3组4位数字+一组12位数字,总共32个数字代表128位。

   3.PostgreSQL同样支持以其他方式输入:

    A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11

    {a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}

    a0eebc999c0b4ef8bb6d6bb9bd380a11

    a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11

    {a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}

 

   uuid uuid[] 

 

 

 

对象标识符

   我的理解就是按照系统表的一套转化规则获取某张系统表的oid,举两个例子应该就能明白了。

   SELECT * FROM pg_attribute WHERE attrelid = 'mytable'::regclass;  

   查看pg_class的表结构,发现表结构里面有个类型为name字段名称为relname的一个字段。

   --> 'mytable'::regclass 就相当于SELECT oid FROM pg_class WHERE relname = 'mytable'

    

   下面这个这个例子规则就会复杂些了。

   select 'sum(int4)'::regprocedure  同样查看pg_proc的表结构select * from pg_proc 发现里面有个类型为name的proname字段

   但是这次不同了,这个proname里面没有sum(int4)只有sum,参数类型应该是在这张表里面别的字段控制的。

   所以说它内部有一套规则,这些类型我们使用::还是相当方便的。

    

名字 引用 描述 数值例子
oid 任意 数字化的对象标识符 564182
regproc pg_proc 函数名字 sum
regprocedure pg_proc 带参数类型的函数 sum(int4)
regoper pg_operator 操作符名 +
regoperator pg_operator 带参数类型的操作符 *(integer,integer) or -(NONE,integer)
regclass pg_class 关系名 pg_type
regtype pg_type 数据类型名 integer
regconfig pg_ts_config 全文检索配置 english
regdictionary pg_ts_dict 全文检索路径 simple

 

   输入格式如下:

   update table_objsymbol set "regproc" = 'lastval'::regproc

   update table_objsymbol set "regdictionary" = 'simple'::regdictionary

   update table_objsymbol set "txid_snapshot" = '10:20:10'

   update table_objsymbol set "tid" = '(3,4)'

  

   xid xid[] (事务(缩写xact)标识符)

   cid cid[] (命令标识符)

   tid tid[] (行标识符)

   oidvector  oidvector[] 

   txid_snapshot txid_snapshot[]  

  

 

 范围类型

   范围类型是相当有用的,它表示一个集合,postgre里面提供了很多函数和操作符来使用这个集合, 如下面的几种操作,但是有一点需要注意的范围的集合是左闭右开的。

  -- 值是否在该范围内

  SELECT int4range(10, 20) @> 15;

  -- 判断是否有交集 

  SELECT numrange(11.1, 22.2) && numrange(20.0, 30.0);

  -- 找出区间的上边界值

  SELECT upper(int8range(15, 25));

  -- 计算集合的交集

  SELECT int4range(10, 20) * int4range(15, 25);

  -- 判断是否为空集

  SELECT isempty(numrange(1, 5));

 

  范围的格式如下:

  (lower-bound,upper-bound)
  (lower-bound,upper-bound]
  [lower-bound,upper-bound)
  [lower-bound,upper-bound]

  empty

  范围类型有下面几种:

  • int4range — Range of integer

  • int8range — Range of bigint

  • numrange — Range of numeric

  • tsrange — Range of timestamp without time zone

  • tstzrange — Range of timestamp with time zone

  • daterange — Range of date

 

 

 

 其它类型 先列出来,有些还没有找到使用方法。

 -- pg_lsn  pg_lsn[]  

 -- aclitem 权限控制,输入格式为'user1=r'。user1为自己定义的用户,后面的权限'arwdDxtXUCTc'只能是其中一种。

 

 -- 查询某字段类型在系统表或者用户表中是否存在

select oid,typname from  pg_type where typname = 'pg_node_tree';

select attrelid::regclass,attname,atttypid from pg_attribute where atttypid=194

 

--pg_node_tree  insert --ERROR: cannot accept a value of type pg_node_tree

select "typdefaultbin" from "pg_type" where "typdefaultbin" is not null

 

--regoper,refcursor,tinterval smgr 系统表中不存在该字段

 

cstring[] pseudo-type 伪列,用户不能使用该列。

gtsvector gtsvector_in not implemented 尚未实现该类型。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics