支援的版本: 目前 (17) / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11

8.18. 網域類型 #

網域是一種使用者定義的資料類型,其基於另一個底層類型。選擇性地,它可以有約束,將其有效值限制為底層類型允許的子集。否則,它的行為就像底層類型一樣 — 例如,可以應用於底層類型的任何運算子或函數都可以在網域類型上使用。底層類型可以是任何內建或使用者定義的基本類型、列舉類型、陣列類型、複合類型、範圍類型或另一個網域。

例如,我們可以建立一個基於整數的網域,該網域僅接受正整數

CREATE DOMAIN posint AS integer CHECK (VALUE > 0);
CREATE TABLE mytable (id posint);
INSERT INTO mytable VALUES(1);   -- works
INSERT INTO mytable VALUES(-1);  -- fails

當底層類型的運算子或函數應用於網域值時,網域會自動向下轉換為底層類型。因此,例如,mytable.id - 1 的結果被認為是 integer 類型,而不是 posint 類型。我們可以寫 (mytable.id - 1)::posint 將結果轉換回 posint,從而重新檢查網域的約束。在這種情況下,如果該表達式已應用於 id 值為 1,則會導致錯誤。允許將底層類型的值賦值給網域類型的欄位或變數,而無需編寫顯式轉換,但會檢查網域的約束。

如需更多資訊,請參閱 CREATE DOMAIN

提交更正

如果您在文件中發現任何不正確、與特定功能的使用經驗不符或需要進一步澄清的地方,請使用此表格來回報文件問題。