PostgreSQL學習筆記-PostgreSQL數據類型

PostgreSQL學習筆記

數據類型

數字類型

類型 長度 描述 範圍 說明
smallint 2字節 小範圍的整數 -32768 至 +32767
integer 4字節 整數 -2147483648 to +2147483647
bigint 8字節 大整數 -9223372036854775808 至+9223372036854775807
decimal 可變長度 用戶自定義的精度。精確 小數點前高達131072位;小數點後高達16383位
numeric 可變長度 用戶自定義的精度數字。精確 小數點前高達131072位;小數點後高達16383位
real 4字節 可變精度,不精確 6位小數精度
double precision 8字節 雙精度。可變精度,不精確 15位小數精度
smallserial 2字節 小型遞增整數 1至32767
serial 4字節 遞增整數 1至2147483647
bigserial 8字節 大型遞增整數 1至 9223372036854775807
int4range integer範圍
int8range bigint範圍
numrange numeric範圍

日期/時間類型

類型 長度 描述 最低值 最高值 範圍
timestamp 8字節 日期和時間,無時區 4713 BC 294276 AD 1微秒/14位
timestamp 8字節 日期和時間,有時區 4713 BC 294276 AD 1微秒/14位
date 4字節 日期,沒有當天時間 4713 BC 5874897 AD 1微秒/14位
time 8字節 時間,無時區,無日期 00:00:00 24:00:00 1微秒/14位
time 8字節 時間,有時區,無日期 00:00:00+1459 24:00:00-1459 1微秒/14位
interval 16字節 時間間隔 -178000000 年 178000000 年 1微秒/14位
tsrange 時間戳範圍,無時區
tstzrange 時間戳範圍,有時區
daterange 日期範圍

幾何類型

類型 長度 描述 表現形式
point 16字節 平面上的點 (x,y)
line 32字節 無限線 {A,B,C}
lseg 32字節 有限限度 ((x1,y1),(x2,y2))
box 32字節 矩形 ((x1,y1),(x2,y2))
path 16+16n bytes 閉合path(和橢圓類似) ((x1,y1),…)
path 16+16n bytes 不閉合 [(x1,y1),…]
polygon 40+16n bytes 橢圓(和閉合path類似) ((x1,y1),…)
circle 24字節 <(x,y),r> (圓心和半徑)

網絡地址類型

類型 長度 描述
cidr 7或19字節 Classless Inter-Domain Routing,無類域間路由選擇。IPv4和IPv6網絡
inet 7或19字節 IPv4,IPv6網絡的主機和網絡
macaddr 6字節 MAC地址

字符類型

類型 描述
character varying(n) 有限可變長度空間
varchar(n) 有限可變長度空間
character(n) 固定長度,空白填充
char(n) 固定長度,空白填充
text 可變無限長度

數組類型

​ 在postgresql中可以創建任何內置的,用戶自定義。或者枚舉類型的數組。默認情況下,數組沒有現在,但是可以定義限制。

聲明數組
CREATE TABLE sal_emp (
    name            text,
    pay_by_quarter  integer[],
    schedule        text[][]
);
CREATE TABLE tictactoe (
    squares   integer[3][3]
);
插入數組值

​ 高緯度的數組值須對應好每個維度,對應錯了就會造成錯誤。

INSERT INTO sal_emp
    VALUES ('Bill',
    '{10000, 10000, 10000, 10000}',
    '{{"meeting", "lunch"}, {"training", "presentation"}}');
數組獲取
WITH arr AS (SELECT ARRAY[0,1,2] int_arr) SELECT int_arr[1] FROM arr; --獲取指定索引的數組值
-- 結果 0
數組切片
WITH arr AS (SELECT ARRAY[0,1,2] int_arr) SELECT int_arr[1:2] FROM arr;
-- 結果 {0,1}
獲取數組相關信息
-- 獲取數組維度
WITH arr AS (SELECT ARRAY[0,1,2] int_arr) SELECT ARRAY_DIMS(int_arr) FROM arr;
-- 結果 [1:3] 
-- 一行三列
獲取某個維度的長度
WITH arr AS (SELECT ARRAY[0,1,2] int_arr) SELECT ARRAY_LENGTH(int_arr,1) FROM arr;
-- 結果 3
-- 第1行的長度是3(列)
獲取數組所有元素總數
WITH arr AS (SELECT ARRAY[0,1,2] int_arr) SELECT cardinality(int_arr) FROM arr;
-- 3
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章