| PostgreSQL | ||
|---|---|---|
| 上一頁 | 下一頁 | |
描述 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 | float(p), p < 7 | 精度為p的浮點數 |
| float8 | float(p), 7 <= p < 16 | 雙精度浮點數 |
| inet | IP v4網路或主機地址 | |
| int2 | smallint | 兩字節長帶符號整數 |
| int4 | int, integer | 四字節長帶符號整數 |
| int8 | 八字節長帶符號整數 | |
| interval | interval | 通用的時間間隔 |
| line | 二維平面中的直線(無限長) | |
| lseg | 二維平面中的線段 | |
| money | decimal(9,2) | 美國風格的貨幣型態 |
| numeric | numeric(p,s) | p == 9,s = 0的準確數字 |
| path | 二平面的開放的或封閉的幾何路徑 | |
| point | 二維平面中的點 | |
| polygon | 二維平面中的封閉幾何路徑 | |
| serial | 用於索引和/或交叉索引的獨一無二的標識符 | |
| time | time | 一天裡的時間 |
| timetz | time with time zone | 一天裡的時間,包括時區 |
| 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 | 當前事務的日期和時間 |
絕大多數與基本型態(如:整數和浮點數)對應的輸入輸出函數都會做錯誤檢查。出於改善執行性能的考慮,一些符號和函數(如加法和乘法)並不做運行時的錯誤檢查。因而在一些系統上的對某些數據型態的數字操作會導致輕微的數值溢出或下溢。
要注意的是一些輸入輸出函數是不可逆的。也就是說,一個輸出函數的輸出結果與輸入的數據相比可能會丟失精度。
注意:浮點數可以保持該型態的最高固有精度(一般來說,雙精度是15位,4字節浮點數是6位)。其他依賴浮點的數據型態(如,幾何型態)也有相似精度。
表 3-3. Postgres 數值型態
| 數值型態 | 儲存空間 | 描述 | 範圍 |
|---|---|---|---|
| decimal | 變長 | 用戶聲明精度 | ~8000 位(數字) |
| float4 | 4 bytes | 變精度 | 6 位數字 |
| float8 | 8 bytes | 變精度 | 15 位數字 |
| int2 | 2 bytes | 固定精度 | -32768 到 +32767 |
| int4 | 4 bytes | 常用的固定精度數 | -2147483648 到 +2147483647 |
| int8 | 8 bytes | 極大範圍的固定精度數 | +/- > 18 位數字 |
| numeric | variable | 用戶聲明精度 | 無限制 |
| serial | 4 bytes | 標識或交叉索引 | 0 到 +2147483647 |
數值型態對應有一套完整的數學符號和函數。相關資訊請參考 數字符號 和 數學函數。
int8 型態因為是要靠編譯器來支援的,因而可能無法在所有平台上得到支援。
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 命令,序列號不會被刪掉而一直在資料庫裡面。
| 上一頁 | 首頁 | 下一頁 |
| 表達式 | 開頭 | 貨幣型態 |