postgresql 10 數據類型 (完整版)

官方數據類型document https://www.postgresql.org/docs/10/static/datatype.htmlhtml

PostgreSQL擁有豐富的數據類型供用戶使用。用戶也可使用 CREATE TYPE 命令向PostgreSQL添加新類型 。算法

通用的數據類型

表1是內置的通用數據類型, 「別名」列中是PostgreSQL內部使用的名稱,這是因爲歷史緣由,某些內部使用或已棄用的類型未在此處列出。
此表基本能涵蓋大部分正常的需求,更豐富的數據類型參考下面的明細,部分不經常使用的沒來得及整理先參考官方連接的文檔~~sql

類型名稱 別名 描述
bigint int8 有符號八字節整數
bigserial serial8 自動遞增八字節整數
bit (n) 固定長度的bit字符串
bit varying (n) varbit (n) 可變長度的bit字符串
boolean bool 邏輯布爾值(true / false)
box 平面上的矩形框
bytea 二進制數據(「字節數組」)
character (n) char (n) 固定長度的字符串
character varying (n) varchar (n) 可變長度字符串
cidr IPv4或IPv6網絡地址
circle 平面上的圓圈
date 日曆日期(年,月,日)
double precision float8 雙精度浮點數(8字節)
inet IPv4或IPv6主機地址
integer int, int4 有符號的四字節整數
interval [ fields ] [ (p) ] 時間跨度
json 文本JSON數據
jsonb 二進制JSON數據
line 平面上的線
lseg 平面上的線段
macaddr MAC(媒體訪問控制)地址
macaddr8 MAC(媒體訪問控制)地址(EUI-64格式)
money 貨幣金額
numeric (p, s) decimal (p, s) 可選精度的精確數字
path 平面上的幾何路徑
pg_lsn PostgreSQL日誌序列號
point 平面上的幾何點
polygon 平面上的閉合的幾何路徑
real float4 單精度浮點數(4個字節)
smallint int2 簽名的雙字節整數
smallserial serial2 自動遞增兩個字節的整數
serial serial4 自動遞增四字節整數
text 可變長度字符串
time (p) without time zone 一天中的時間(沒有時區)
time (p) with time zone timetz 一天中的時間,含時區
timestamp (p) without time zone 日期和時間(沒有時區)
timestamp (p) with time zone timestamptz 日期和時間,含時區
tsquery 文本搜索查詢
tsvector 文本搜索文檔
txid_snapshot 用戶級事務ID快照
uuid 廣泛惟一的標識符
xml XML數據

一、數字類型

Numeric Types - https://www.postgresql.org/docs/10/static/datatype-numeric.html數據庫

類型名稱 存儲大小 描述 範圍
smallint 2 bytes 整數(小範圍) -32768 至 +32767
integer 4 bytes 整數(經常使用) -2147483648 至 +2147483647
bigint 8 bytes 整數(大範圍) -9223372036854775808 至 +9223372036854775807
decimal variable 可指定精確精度 小數點前最多131072位; 小數點後最多16383位
numeric (p,s) variable 可指定精確精度 小數點前最多131072位; 小數點後最多16383位
real 4 bytes 精度可變 精度至少6位
double precision 8 bytes 精度可變 精度至少15位
smallserial 2 bytes 自動遞增整數(小範圍) 1 至 32767
serial 4 bytes 自動遞增整數 1 至 2147483647
bigserial 8 bytes 自動遞增整數(大範圍) 1 至 9223372036854775807

二、貨幣類型

Monetary Types - https://www.postgresql.org/docs/10/static/datatype-money.htmljson

類型名稱 存儲大小 描述 範圍
money 8 bytes 貨幣金額,保留2位小數 -92233720368547758.08 至 +92233720368547758.07

money固定小數點後2位,超過2位長度會四捨五入,仔細看會發現金額前面有貨幣類型,這個是根據服務端的lc_monetary設置的。數組

select '12.34567'::money;
---------------------
¥12.35

/*查看貨幣類型*/
show lc_monetary;
---------------------
Chinese (Simplified)_People's Republic of China.936

/*重設貨幣類型*/
set lc_monetary='C';

/*再次查詢貨幣,發現貨幣類型改了*/
select '12.34567'::money;
---------------------
$12.35

比較坑爹的是lc_monetary的設置是跟着數據庫走的,也就是一個數據庫只能有一種lc_monetary,因此不建議用money類型,改用numeric安全

三、字符類型

Character Types - https://www.postgresql.org/docs/10/static/datatype-character.html網絡

類型名稱 存儲大小 描述
character (n) n 若是存儲的值比字段申明長度短,會用空白代替,不聲明長度n默認是1
character varying (n) n 若是存儲的值比字段申明長度短,不會用空白代替,不聲明長度n表明任意長度
text 任意長度 大文本使用
"char" 1 byte 注意數據類型有引號,非通常用戶用,主要用於內部系統目錄中做爲簡單的枚舉類型
name 64 bytes 固定長度,非通常用戶用,主要用於內部系統目錄中存儲標識符

character實際存儲和顯示的會用空白填充長度,可是比較字符串或者轉換成其餘字符串,填充的空白會被刪除
character varying和text不會默認用空白填充長度,但文本自己尾部有空白的話不會默認去掉,這種空白是有意義的
大多數狀況下,字符串類型通常用character varying或textapp

四、二進制數據類型

Binary Data Types - https://www.postgresql.org/docs/10/static/datatype-binary.html函數

類型名稱 存儲大小 描述
bytea 1或4個字節加上實際的二進制字符串 可變長度二進制字符串

bytea 類型支持兩種輸入和輸出格式:"escape" 和 "hex"
輸出格式默認是 「hex」,能夠經過配置參數bytea_output 進行修改,以下代碼第一行,window下實測不改也不影響中文呈現,liunx下可能須要設置

set bytea_output = 'escape';
/* 建立表 */
CREATE TABLE testbytea (sid serial,info bytea);
/* 插入數據 */
insert into testbytea(info) values('內容1')
/* 若是數據量很大能夠用 || 分批次追加更新內容,更新完後完整內容是 "內容1 hello2" */
update testbytea set info=info||cast(' hello2' as bytea) where sid=1;

/* 中文查詢方式1:用默認的解碼方式,再轉一遍utf8能夠直接解決中文呈現問題 */
select sid,convert_from(info, 'utf8') from testbytea;
-------+-------------
  1    |  內容1 hello2

/* 中文查詢方式2: 指定解碼方式直接查詢,中文顯示有問題,字母和數字正常 */
select sid,encode(info,'escape')as info from testbytea;
--------+------------
  1     | \345\206\205\345\256\2711 hello2

/* 中文查詢方式2:注意convert_from無法直接放在上面的encode裏嵌套,須要複製下文本再轉換一下utf8 */
SELECT convert_from('\345\206\205\345\256\2711 hello2', 'utf8');
---------------------
內容1 hello2

五、日期/時間類型

Date/Time Types - https://www.postgresql.org/docs/10/static/datatype-datetime.html

類型名稱 存儲大小 描述 最小值 最大值 最小精度
timestamp (p) without time zone 8 bytes 日期和時間 (不含時區) 公元前 4713年 公元 294276年 微秒
timestamp (p) with time zone 8 bytes 日期和時間 (含時區) 公元前 4713年 公元 294276年 微秒
date 4 bytes 日期,不含時間 公元前 4713年 公元 5874897年
time (p) without time zone 8 bytes 時間,不含日期 (不含時區) 00:00:00 24:00:00 微秒
time (p) with time zone 12 bytes 時間,不含日期 (含時區) 00:00:00+1459 24:00:00-1459 微秒
interval [ fields ] (p) 16 bytes 時間間隔 -178000000 年 178000000 年 微秒

timestamp若是隻填寫時間則認爲沒有時區,時區做爲一個可選參數
time、timestamp和interval接受一個可選的精度值p,指在seconds中保留的小數位數,默認沒有限制但不能超過6 ( 注意: p範圍是0到6 )

/*沒有時區,p>6時的結果與p=6結果一致。使用pgAdmin添加timestamp字段時提示長度不能大於9是錯誤的,應是不能大於6*/
select timestamp(6) without time zone '2018-08-01 12:01:01.12345678910';
---------------------
2018-08-01 12:01:01.123457

/*有時區 */
select timestamp(6) with time zone '2018-08-01 12:01:01.12345678910';
---------------------
2018-08-01 12:01:01.123457+08

interval 類型有一個附加選項,它經過編寫如下短語之一來限制存儲字段集:

YEAR
MONTH
DAY
HOUR
MINUTE
SECOND
YEAR TO MONTH
DAY TO HOUR
DAY TO MINUTE
DAY TO SECOND
HOUR TO MINUTE
HOUR TO SECOND
MINUTE TO SECOND

六、布爾類型

Boolean Type Types - https://www.postgresql.org/docs/10/static/datatype-boolean.html

類型名稱 存儲大小 描述
boolean 1 bytes true 或 false

true狀態的有效字符爲: TRUE 't' 'true' 'y' 'yes' 'on' '1'
false狀態的有效字符爲: FALSE 'f' 'false' 'n' 'no' 'off' '0'

七、枚舉類型

Enumerated Types - https://www.postgresql.org/docs/10/static/datatype-enum.html
使用CREATE TYPE命令建立枚舉類型

CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');
CREATE TABLE person (
    name text,
    current_mood mood
);
INSERT INTO person VALUES ('Moe', 'happy');
SELECT * FROM person WHERE current_mood = 'happy';
 name | current_mood 
------+--------------
 Moe  | happy
(1 row)

和代碼裏的枚舉相似,每一個枚舉有對應的一個值,因此能夠實現 WHERE current_mood > 'sad' (查出'ok' 和 'happy') 或者 ORDER BY current_mood DESC (根據枚舉對應的值進行排序,非字符串)

八、幾何類型

Geometric Types - https://www.postgresql.org/docs/10/static/datatype-geometric.html

類型名稱 存儲大小 描述 示例
point 16 bytes 平面座標 (x,y)
line 32 bytes 無窮線 {A,B,C}
lseg 32 bytes 線段 ((x1,y1),(x2,y2))
box 32 bytes 矩形框 ((x1,y1),(x2,y2))
path 16+16n bytes 多邊形封閉路徑 ((x1,y1),...)
path 16+16n bytes 開放路徑 [(x1,y1),...]
polygon 40+16n bytes 多邊形(相似封閉路徑) ((x1,y1),...)
circle 24 bytes 圓形 <(x,y),r> (center point and radius)

九、網絡地址類型

Network Address Types - https://www.postgresql.org/docs/10/static/datatype-net-types.html

類型名稱 存儲大小 描述
cidr 7 or 19 bytes IPv4 and IPv6 networks
inet 7 or 19 bytes IPv4 and IPv6 hosts and networks
macaddr 6 bytes MAC addresses
macaddr8 8 bytes MAC addresses (EUI-64 format)

十、二進制字符串類型

Bit String Types - https://www.postgresql.org/docs/10/static/datatype-bit.html

十、網絡地址類型

Network Address Types - https://www.postgresql.org/docs/10/static/datatype-net-types.html

十一、文本搜索類型

Text Search Types - https://www.postgresql.org/docs/10/static/datatype-textsearch.html

tsvector:類型表示以文本搜索優化的形式的文檔
tsquery:類型相似地表示文本查詢

十二、UUID類型

UUID Type - https://www.postgresql.org/docs/10/static/datatype-uuid.html
此數據類型稱爲全局惟一標識符,或稱爲GUID,此標識符是128位數量,由選擇的算法生成,其餘人不基本不可能生成相同的惟一標識。
示例標識符以下:

A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11
{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}
a0eebc999c0b4ef8bb6d6bb9bd380a11
a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11
{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}

1三、XML類型

XML Type - https://www.postgresql.org/docs/10/static/datatype-xml.html
用於存儲XML數據, 它與在文本字段中直接存儲XML數據的優點是它會檢查輸入值的格式是否正確,而且有支持函數對其執行類型安全操做;

1四、JSON類型

JSON Type - https://www.postgresql.org/docs/10/static/datatype-json.html
此類數據也能夠存儲爲text,但JSON數據類型的優勢是能夠根據JSON規則強制每一個存儲的值有效。還有各類特定於JSON的函數和運算符可用於存儲在這些數據類型中的數據,JSON有兩種數據類型 json和jsonb,兩種類型的主要區別是效率:
json:能夠理解爲純文本插入,插入效率高,實際解析時候須要從新執行分析
jsonb:存儲爲二進制,插入效率略慢,但處理要快不少,由於不須要從新分析,且jsonb還支持索引,通常大部分程序會使用jsonb。

1五、Arrays類型

Arrays - https://www.postgresql.org/docs/10/static/arrays.html

1六、複合類型

Composite Types- https://www.postgresql.org/docs/10/static/rowtypes.html

1七、範圍類型

Range Types- https://www.postgresql.org/docs/10/static/rangetypes.html

1八、對象標識類型

Object Identifier Types - https://www.postgresql.org/docs/10/static/datatype-oid.html

1九、pg_lsn類型

pg_lsn Type - https://www.postgresql.org/docs/10/static/datatype-pg-lsn.html

20、僞類型

Pseudo-Types - https://www.postgresql.org/docs/10/static/datatype-pseudo.html

相關文章
相關標籤/搜索