PostgreSQL:其它型別

Ryan_Bai發表於2020-12-01

布林型別

PostgreSQL 提供了標準的 SQL 型別布林值。布林型別可以有幾種狀態:true、false 和第三狀態 null,這是 SQL 空值表示。

名稱 儲存長度 描述
boolean 1 byte 狀態為 true 或 false

列舉型別

列舉(列舉)型別的資料型別,包括靜態,有序設定的值。在許多程式語言支援列舉型別,它們是相等。

CREATE TYPE week AS ENUM ('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun');

列舉一旦產生,它們可以像任何其他型別。

幾何型別

幾何資料型別表示二維空間物件。最根本的不同點是形成的所有其他型別的基礎。

名稱 儲存長度 表示 描述
point 16 bytes 平面上的點 (x,y)
line 32 bytes 無限的線(未完全實現) ((x1,y1),(x2,y2))
lseg 32 bytes 有限的線段 ((x1,y1),(x2,y2))
box 32 bytes 矩形框 ((x1,y1),(x2,y2))
path 16+16n bytes 封閉路徑(類似於多邊形) ((x1,y1),...)
path 16+16n bytes 開啟路徑 [(x1,y1),...]
polygon 40+16n 多邊形(類似於封閉路徑) ((x1,y1),...)
circle 24 bytes <(x,y),r> (中心點和半徑)

位串型別

位串型別用於儲存位掩碼。他們要麼是 0 或 1。 SQL 位型別有兩種:(n)的位而變位(n)的,其中 n 是一個正整數。

文字搜尋型別

這個型別支援全文檢索,這是透過自然語言文件的集合的搜尋,找到那些最符合查詢活動。這有兩種資料型別:

名稱 描述
tsvector 這是一個由不同的單片語成的排序列表,這些單詞被規範化,以合併同一個單詞的不同變體,稱為“詞彙”。
tsquery 它儲存要搜尋的語義,並按照布林運算子& (and)、| (OR)和!(非)。括號可用於強制運算子的分組。

UUID 型別

一個 UUID(通用唯一識別符號)寫成小寫的十六進位制數字序列,由連字號,特別是一組 8 位數字,然後由三組4位數字,然後由一組 12 位數字分開幾組,總 32 位,128 位代表。

一個UUID的例子是: 550e8400-e29b-41d4-a716-446655440000

XML 型別

XML 資料型別可以用來儲存 XML 資料。對於儲存 XML 資料,首先建立 XML 值函式 XMLPARSE 如下:

XMLPARSE (DOCUMENT '<?xml version="1.0"?> <tutorial> <title>PostgreSQL Tutorial </title> <topics>...</topics> </tutorial>') XMLPARSE (CONTENT 'xyz<foo>bar</foo><bar>foo</bar>')

JSON型別

JSON 資料型別可以用來儲存 JSON( JavaScript 物件符號)資料。這樣的資料也可以被儲存為文字,但 JSON 資料型別具有的優點是檢查每個儲存的值是否為有效的 JSON 值。也有相關的支援功能可以直接用來處理 JSON 資料型別,如下所示:

示例 結果
array_to_json('{{1,5},{99,100}}'::int[]) [[1,5],[99,100]]
row_to_json(row(1,'foo')) {"f1":1,"f2":"foo"}

複合型別

此型別代表一個欄位名和資料型別,即結構的一個表中的行或記錄列表。

複合型別宣告

下面的例子演示如何宣告一個複合型別:

CREATE TYPE inventory_item AS ( name text, supplier_id integer, price numeric );

此資料型別可用於在建立表如下所示:

CREATE TABLE on_hand (item inventory_item, count integer );

複合值輸入

複合值可以插入文字常量,封裝領域括號內的值,並用逗號將它們隔開。一個例子是如下:

INSERT INTO on_hand VALUES (ROW('fuzzy dice', 42, 1.99), 1000); yiibai.com

此有效的定義同上的 inventory_item 的。行關鍵字實際上是可選的表示式中,只要有一個以上的欄位。

訪問複合型別

要訪問一個複合列的欄位,欄位名,使用點很像選擇欄位從一個表名。例如,要選擇一些子欄位,on_hand 示例表的查詢將如下所示:

SELECT (item).name FROM on_hand WHERE (item).price > 9.99;

甚至可以使用表名(例如,在一個多表查詢),像這樣:

SELECT (on_hand.item).name FROM on_hand WHERE (on_hand.item).price > 9.99;

範圍型別

範圍型別的資料型別,採用了一系列資料。範圍型別可以是離散的範圍(例如,所有的整數值 1 到 10)或連續範圍(例如任何時間點的上午 10:00 到上午 11:00)。

內建的範圍型別範圍包括:

  • int4range:整數範圍

  • int8range:長整型數字範圍

  • numrange:數值範圍

  • tsrange:沒有時區的時間戳範圍

  • tstzrange:帶有時區的時間戳範圍

  • daterange:日期範圍

可以建立自定義的範圍型別,做出新的型別的適用範圍,如使用int型別為基礎的IP地址範圍,或者使用浮點資料型別為基礎的浮動範圍。

範圍型別支援包容性和排他性的範圍邊界分別使用 [] 和 () 個字元,例如: [4,9) 代表所有從包括 4 但不包括 9 的整數。

物件識別符號型別

物件識別符號(OID)內部使用 PostgreSQL 作為各種系統表的主鍵。 OIDS IfWITH 指定或 default_with_oids 配置變數,只有在這樣的情況下啟用的 OID 被新增到使用者建立的表。下表列出了幾個別名型別。 OID 別名型別有沒有自己的操作,除了專門的輸入和輸出過程。

名稱 參考 描述 結果
oid any 數字物件識別符號 564182
regproc pg_proc 函式名 sum
regprocedure pg_proc 帶引數型別的函式 sum(int4)
regoper pg_operator 運算子名稱  +
regoperator pg_operator 帶引數型別的運算子 *(integer,integer) 或 -(NONE,integer)
regclass pg_class 關係名稱 pg_type
regtype pg_type 資料型別名 integer
regconfig pg_ts_config 文字搜尋配置 english
regdictionary pg_ts_dict 文字搜尋字典 simple

偽型別

PostgreSQL型別系統包含了一些特殊用途的統稱為偽型別的項。一個偽型別不能被用作列的資料型別,但它可以用來宣告一個函式的引數或結果型別。下表列出了現有的偽型別。

名稱 描述
any 指示函式接受任何輸入資料型別。
anyelement 指示函式接受任何資料型別。
anyarray 指示函式接受任何陣列資料型別。
anynonarray 指示函式接受任何非陣列資料型別。
anyenum 指示函式接受任意列舉資料型別。
anyrange 指示函式接受任何範圍資料型別。
cstring 指示一個函式接受或返回一個以 null 結尾的 C 字串。
internal 指示函式接受或返回伺服器內部資料型別。
language_handler 程式語言呼叫處理程式被宣告為返回 language_handler。
fdw_handler 外資料包裝處理程式被宣告為返回 fdw_handler。
record 標識返回未指定行型別的函式。
trigger 觸發器函式被宣告為返回觸發器。
void 指示函式不返回值。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31490526/viewspace-2738520/,如需轉載,請註明出處,否則將追究法律責任。

相關文章