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 ] [ , ALIGNMENT = alignment ] [ , STORAGE = storage ] )
輸入
- typename
-
將要創建的類型名.
- internallength
-
一個文本串,說明新類型的內部長度.
- externallength
-
一個文本串,說明新類型的外部(顯示)長度.
- input_function
-
一個函數的名稱,由 CREATE FUNCTION創建, 將數據從外部類型轉換成內部類型.
- output_function
-
一個函數的名稱,由 CREATE FUNCTION創建, 將數據從內部格式轉換成適于顯示的形式.
- element
-
被創建的類型是數組;這個聲明數組元素的類型.
- delimiter
-
數組的分隔字符.
- default
-
該類型的缺省值.通常是省略它的,所以缺省是 NULL.
- send_function
-
用 CREATE FUNCTION 創建的函數名,它將該類型的數據轉換成一個適合傳輸到其他機器的形式.
- receive_function
-
用 CREATE FUNCTION 創建的函數名,將該類型從適于傳輸給其他機器的形式轉換為內部形式.
- alignment
-
該數據類型的存儲對齊要求.如果聲明了,必須是 'int4' 或 'double'; 缺省是 'int4'.
- storage
-
該數據類型的存儲技術.如果聲明了,必須是 'plain','external', 'extended',或 'main'; 缺省是 'plain'.
描述
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字節的類型你不能傳遞參數值.
storage 關鍵字 允許為變長數據類型選擇 TOAST 存儲方法 (定長類型只允許使用 plain). plain 為該數據類型關閉 TOAST:它將 總是用內聯的方式而不是壓縮的方式存儲. extended 是 TOAST 完全兼容的:系統將首先試圖壓縮 一個長的數據值,然后如果它仍然太長的話就將它的值移出主表的行. external 允許將值移出主表的行,但系統將不會壓縮它. main 允許壓縮,但是不贊成把數值移動出主表. (用這種存儲方法的數據項可能仍將移動出主表,如果不能放在一行里的話, 但是它們將比 extended 和 external 項更愿意呆在主表里.)
對于新的基本類型, 用戶可以通過本節描述的一些功能定義操作符,函數和聚集.
例子
這個命令創建長方形數據類型,并且將這種類型用于一個表定義:
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);
|----------------------------------------------------------------------------------------|
版權聲明 版權所有 @zhyiwww
引用請注明來源 http://www.aygfsteel.com/zhyiwww
|----------------------------------------------------------------------------------------|