網域是一種使用者定義的資料類型,其基於另一個底層類型。選擇性地,它可以有約束,將其有效值限制為底層類型允許的子集。否則,它的行為就像底層類型一樣 — 例如,可以應用於底層類型的任何運算子或函數都可以在網域類型上使用。底層類型可以是任何內建或使用者定義的基本類型、列舉類型、陣列類型、複合類型、範圍類型或另一個網域。
例如,我們可以建立一個基於整數的網域,該網域僅接受正整數
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。
如果您在文件中發現任何不正確、與特定功能的使用經驗不符或需要進一步澄清的地方,請使用此表格來回報文件問題。