| PostgreSQL | ||
|---|---|---|
| 上一頁 | 下一頁 | |
CREATE TYPE ─ 定義一個新的基本數據型態
CREATE TYPE typename ( INPUT = input_function, OUTPUT = output_function
, INTERNALLENGTH = { internallength | VARIABLE } [ , EXTERNALLENGTH = { externallength | VARIABLE } ]
[ , DEFAULT = "default" ]
[ , ELEMENT = element ] [ , DELIMITER = delimiter ]
[ , SEND = send_function ] [ , RECEIVE = receive_function ]
[ , PASSEDBYVALUE ] )
CREATE TYPE 允許用戶在 Postgres 當前資料庫裡創建一個新的用戶數據型態。定義該型態的用戶成為其所有者。 Typename 是新型態的名稱而且必須在所定義的資料庫中唯一。
CREATE TYPE 需要在定義型態之前先註冊兩個函數(用創建函數命令)。新的基本型態的形式由 input_function 決定,它將該型態的外部形式轉換成可以被對該型態操作的運算符號和函數識別的形式。自然,output_function 用做相反用途。輸入和輸出函數都必須定義成接收一個或兩個型態為 "opaque" 的參數的函數。
新的基本數據型態可定義成為定長,這時 internallength 是一個正整數,也可以是變長的,這時 Postgres 假定新型態的格式和 Postgres 所支援的"text" 型態是一樣的。要指明一個型態是變長,將 internallength 設成 VARIABLE. 類似的,外部形式也用 externallength 關鍵字聲明。
要指明一個型態是數組以及指明一個型態有數組元素。應該使用element關鍵字。例如,定義一個4-字節整數("int4"),聲明如下
ELEMENT = int4
要聲明用於這種型態數組的分隔符,可設置 delimiter 聲明分隔符。預設的分隔符是逗號 (",")。
一個可選的的預設值可用於令用戶聲明某種位模式來代表"數據不存在"。用 DEFAULT 關鍵字聲明預設值。
可選的函數 send_function 和 receive_function 用於請求 Postgres 服務的應用程式和 Postgres 資料庫不在同一台機器的場合。在這種情況下,Postgres 運行的機器所用的數據型態格式可能和遠端機器的不一樣。在這種情況下,將伺服器到客戶端的數據轉換成一個標準格式,當伺服器收到從客戶端來的數據時再轉換成機器的格式是合適的。如果沒有這樣的函數聲明,就假設內部數據格式可以被任何相關的硬件體系接受。比如, 如果在一台 Sun-4 和一台 DECstation 之間傳遞數據,單字節數據就不必轉換,但許多其他型態需要(轉換)。
可選的標簽,PASSEDBYVALUE,表明使用該數據型態的運算符號或函數應該傳遞一個參數的值而不是引用(形參)。要注意對內部格式超過4-字節的型態你不能傳遞參數值。
對於新的基本型態,用戶可以通過本節描述的一些功能定義運算符號,函數和聚集。
兩個通用內建函數,array_in 和 array_out,用於快速建立變長數組型態。這些函數可對任何現存的 Postgres 數據型態進行操作。
一個"正常的" Postgres 型態最多只能有8192字節長。如果你需要更大的型態,你必須創建大對像型態(Large Object type)。這些數據型態的介面在 PostgreSQL 程式員手冊 裡詳細討論。所有大對像型態的長度總是 VARIABLE (變長)。
這個命令創建長方形數據型態,並且將這種型態用於一個表定義:
CREATE TYPE box (INTERNALLENGTH = 8,
INPUT = my_procedure_1, OUTPUT = my_procedure_2);
CREATE TABLE myboxes (id INT4, description box);
這條命令創建一個變長數組型態, 其數組元素的型態是整數。
CREATE TYPE int4array (INPUT = array_in, OUTPUT = array_out,
INTERNALLENGTH = VARIABLE, ELEMENT = int4);
CREATE TABLE myarrays (id int4, numbers int4array);
這條命令創建一個大對像型態並用其創建了一個表:
CREATE TYPE bigobj (INPUT = lo_filein, OUTPUT = lo_fileout,
INTERNALLENGTH = VARIABLE);
CREATE TABLE big_objs (id int4, obj bigobj);
型態名不能以下畫線("_")開頭而且只能有15個字符長。這是因為 Postgres 偷偷地為每種基本型態創建了一個數組型態,而且該數組型態的名字是基本型態名前面加一個下畫線。
請參考 DROP TYPE 獲取刪除一個型態的資訊。
請參閱 PostgreSQL 程式員手冊 中 CREATE FUNCTION, CREATE OPERATOR 和大對像的章節獲取更多資訊。
CREATE TYPE 是 SQL3 語句。
| 上一頁 | 首頁 | 下一頁 |
| CREATE TRIGGER | 開頭 | CREATE USER |