PostgreSQL
上一頁   下一頁

第三章. 數據型態

內容
數值型態
貨幣型態
字符型態
日期/時間型態
布爾型態
幾何型態
IP 版本 4 網路和主機型態

描述 Postgres 內建的可用數據型態。

Postgres 有著豐富的數據型態可用。用戶可以使用 DEFINE TYPE 命令為 Postgres增加新的數據型態。(該命令將在別處描述)

在數據型態這部分,隨後的各節將討論 SQL 標準的兼容性,移植問題和使用問題。一些 Postgres 型態直接與 SQL92-兼容型態相對應。其它一些 SQL92 語法定義的數據型態直接映射為Postgres 內部的數據型態。 許多內建的數據型態有明確的外部格式。但是,有一些數據型態或者是Postgres 特有的,如開放和閉合路徑,或者是有幾種可能格式的型態,如日期和時間型態。

表 3-1. Postgres 數據型態

Postgres型態 SQL92 或 SQL3 型態 描述
bool boolean 邏輯布爾量 (真/假)
box   二維平面中的方形盒
char(n) character(n) 定長字符串
cidr   IP v4網路或主機地址
circle   二維平面中的圓
date date 日歷日期(不帶時間)
decimal decimal(p,s) p <= 9,s = 0 的準確數字
float4/8 float(p) 精度為p的浮點數
float8 real, double precision 雙精度浮點數
inet   IP v4網路或主機地址
int2 smallint 兩字節長帶符號整數
int4 int, integer 四字節長帶符號整數
int8   八字節長帶符號整數
line   二維平面中的直線(無限長)
lseg   二維平面中的線段
money decimal(9,2) 美國風格的貨幣型態
numeric numeric(p,s) p == 9,s = 0的準確數字
path   二平面的開放的或封閉的幾何路徑
point   二維平面中的點
polygon   二維平面中的封閉幾何路徑
serial   用於索引或交叉索引的獨一無二的標識符
time time 時間
timespan interval 通用的時間間隔
timestamp timestamp with time zone 日期/時間
varchar(n) character varying(n) 變長的字符串

注意: cidr 和 inet 用於處理任何IP型態數據,但目前只能處理ipv4的數據。在以後的版本裡我們將將所有對ipv4的支援增加到對ipv6的支援中。

表 3-2. Postgres 函數常量

Postgres函數 SQL92 常量 描述
getpgusername() current_user 當前會話的用戶名
date('now') current_date 當前事務的日期
time('now') current_time 當前事務的時間
timestamp('now') current_timestamp 當前事務的日期和時間

Postgres 擁有開發 ORDBMS 應用的首要特性。除了符合SQL3規範外,我們還支援很大一部分 SQL92 規範。盡管我們盡可能地遵循 SQL92 規範,但該規範裡有一些方面欠缺考慮,在後繼的規範中不可能繼續存在。Postgres不會為這些特性花費太多的時間﹔因為這些方面主要發生在很少使用或語意含混的場合,典型的用戶很少能碰到它們。

絕大多數與基本型態(如:整數和浮點數)對應的輸入輸出函數都會做錯誤檢查。出於改善執行性能的考慮,一些運算符號和函數(如加法和乘法)並不做運行時的錯誤檢查。因而在一些系統上的對某些數據型態的數字操作會導致輕微的數值溢出或溢入(?underflow)。

要注意的是一些輸入輸出函數是不可逆的。也就是說,一個輸出函數的輸出結果與輸入的數據相比可能會丟失精度。

注意: 最早的從伯克利過來的 Postgres v4.2 程式碼對所有雙精度浮點數輸出時都圓整到六位精度。從 v6.1 開始, 浮點數可以保持該型態的最高固有精度(一般來說,雙精度是15位,4字節浮點數是6位)。其他依賴浮點的數據型態(如,幾何型態)也有相似精度。

數值型態

數值型態由2或4字節的整數以及4或8字節的浮點數組成。

表 3-3. Postgres 數值型態

數值型態 儲存空間 描述 範圍
decimal 變長 用戶聲明精度 無限制
float4 4 bytes 變精度 6 位數字
float8 8 bytes 變精度 15 位數字
int2 2 bytes 固定精度 -32768 到 +32767
int4 4 bytes 通常的固定精度數 -2147483648 到 +2147483647
int8 8 bytes 大範圍的固定精度數 +/- > 18 位數字
numeric 變長 用戶聲明精度 無限制
serial 4 bytes 標識或交叉索引 0 到 +2147483647

數值型態對應有一套完整的數學運算符號和函數。相關資訊請參考 數字運算符號數學函數

int8 型態因為是要靠編譯器來支援的,因而可能無法在所有平台上得到支援。

Serial(序列)型態

serial 型態是 Postgres 用其他現有的型態構造出來的一種特殊的型態。典型的應用是創建表的唯一標識,在當前的實現中,下面一句話:

CREATE TABLE tablename (colname SERIAL);
     

等價於下面幾句話:

CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename
    (colname INT4 DEFAULT nextval('tablename_colname_seq');
CREATE UNIQUE INDEX tablename_colname_key on tablename (colname);
     
注意
創建 serial 型態的隱含序列號在刪除表時不會自動刪除

在刪除一個包含 serial 型態的表的時候,隱含的支援 serial 的序列號不會被自動刪除。因此下面順序執行的命令將是無效的:

CREATE TABLE tablename (colname SERIAL);
DROP TABLE tablename;
CREATE TABLE tablename (colname SERIAL);
     

除非顯式地使用 DROP SEQUENCE 命令,序列號不會被刪掉而一直在資料庫裡面。


上一頁 首頁 下一頁
表達式 開頭 貨幣型態