PostgreSQL 数据类型介绍(三)

  • bytea类型

该类型存储的是一个个的字节流,也就是这个类型什么都可以存储。
比如,你要想在字符串里存空字符就没法存储。

类似于java里的字节流吧,可以存储任何类型。

Paste_Image.png

The bytea data type allows storage of binary strings
bytea 类型 允许存储二进制串
A binary string is a sequence of octets (or bytes)

这里的binary string 是一串 octets ,也就是存储最小单位是 octet.

备注: octets 和 byte 的区别

最近项目中写文档,由于跟老外合作,所有都是英文的。经常遇到octet这个词,我只是知道byte是一个由8 bits构成的字节,那么octet是什么呢?原来,不同计算机中字节的长度不同,为了不引起歧义,用octet专指8 bits构成的字节。

bytea与字符类型的区别

binary strings specifically allow storing octets of value zero and other "non-printable" octets.
个人理解:
bytea可以允许存储 大小为0个octets的二进制串,或者其余的无法打印出来的二进制串。
但是 字符类型却不可以。

Character strings disallow zero octets, and also disallow any other octet values and sequences of octet values that are invalid according to the database's selected character set encoding.
字符串类型不允许存储 大小为 0个 octet的二进制对象,同样不允许存储那些 数据库字符集不允许存在(无法打印的)字符。
比如说 你发明了一个文字,这个文字你的字符集里并没有,那么你就不能用字符串存储这个文字,你可以将其存储为 bytea类型。 不懂可以留言。
Second, operations on binary strings process the actual bytes, whereas the processing of character strings depends on locale settings. In short, binary strings are appropriate for storing data that the programmer thinks of as "raw bytes", whereas character strings are appropriate for storing text.

关于如何使用 bytea的问题,我会写一篇独立博客来阐述的

-几何类型

几何类型概述.png

可以存储的几何类型有:

依次为: 点、线、线段、矩阵、路径(可以是闭环) 路径(打开的环)
任意几何类型类似于 闭环)、 圆 。

  • 网络地址类型
网络地址类型

支持
cidr 、 inet (可以存储主机,也可以存储网络)、macaddr

postgres=# create table tbl_ip_info (id integer , province character varying(10),start_ip inet,end_ip inet);
CREATE TABLE
postgres=# 
postgres=# 
postgres=# insert into tbl_ip_info values (1,'浙江','192.168.1.254','192.168.2.5');
INSERT 0 1
postgres=# insert into tbl_ip_info values (2,'广东','192.168.2.254','192.168.3.5');
INSERT 0 1
postgres=# insert into tbl_ip_info values (3,'湖南','192.168.3.254','192.168.4.5');
INSERT 0 1
postgres=# select * from tbl_ip_info ;
 id | province |   start_ip    |   end_ip    
----+----------+---------------+-------------
  1 | 浙江     | 192.168.1.254 | 192.168.2.5
  2 | 广东     | 192.168.2.254 | 192.168.3.5
  3 | 湖南     | 192.168.3.254 | 192.168.4.5
(3 rows)
//可以通过创建一个序列,填充区间内的IP 
postgres=#  select id,generate_series(0,end_ip-start_ip)+start_ip
postgres-# from tbl_ip_info ;
 id |   ?column?    
----+---------------
  1 | 192.168.1.254
  1 | 192.168.1.255
  1 | 192.168.2.0
  1 | 192.168.2.1
  1 | 192.168.2.2
  1 | 192.168.2.3
  1 | 192.168.2.4
  1 | 192.168.2.5
  2 | 192.168.2.254
  2 | 192.168.2.255
  2 | 192.168.3.0
  2 | 192.168.3.1
  2 | 192.168.3.2
  2 | 192.168.3.3
  2 | 192.168.3.4
  2 | 192.168.3.5
  3 | 192.168.3.254
  3 | 192.168.3.255
  3 | 192.168.4.0
  3 | 192.168.4.1
  3 | 192.168.4.2
  3 | 192.168.4.3
  3 | 192.168.4.4
  3 | 192.168.4.5
(24 rows)

  • 比特类型: 支持变长的比特类型和定长的比特类型

Bit strings are strings of 1's and 0's. They can be used to store or visualize bit masks. There are two SQL bit types: bit(n) and bit
varying(n), where n is a positive integer.

a字段为定长的类型、b为可变长度。
postgres=# CREATE TABLE test (a BIT(3), b BIT VARYING(5));
CREATE TABLE


postgres=# INSERT INTO test VALUES (B'101', B'00');
INSERT 0 1

备注: a字段为固定长度, B'10' 为长度为2,不符合定长,所以报错。
postgres=# INSERT INTO test VALUES (B'10', B'101');
ERROR:  bit string length 2 does not match type bit(3)

postgres=# INSERT INTO test VALUES (B'10'::bit(3), B'101');
INSERT 0 1
备注:B'10'::bit(3)  强制转换后,虽然长度不够,但是还是强制在末尾添加一个0,存入成功。
postgres=# SELECT * FROM test;
  a  |  b  
-----+-----
 101 | 00
 100 | 101
(2 rows)

  • 全文检索类型
    其实里面包含了两个类型
  1. tsvector
    去除重复分词后按分词顺序存储
    可以存储位置信息和权重信息
  2. tsquery
    存储查询的分词, 可存储权重信息

关于全文检索类型如何使用,我会有一篇专门的博客来解释的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,290评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,399评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,021评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,034评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,412评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,651评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,902评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,605评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,339评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,586评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,076评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,400评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,060评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,851评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,685评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,595评论 2 270

推荐阅读更多精彩内容