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