域(domain)是使用者定義的資料型別,它基於另一個基礎型別(underlying type)。可選地,它可以包含約束,將有效值限制在基礎型別允許的子集內。否則,它的行為與基礎型別相同 — 例如,任何可應用於基礎型別的運算子或函式都可以應用於域型別。基礎型別可以是任何內建的或使用者定義的基礎型別、列舉型別、陣列型別、複合型別、範圍型別或另一個域。
例如,我們可以建立一個基於整數的域,該域只接受正整數
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。
如果您在文件中發現任何不正確之處,與您在使用特定功能時的實際情況不符,或者需要進一步的澄清,請使用 此表單 來報告文件問題。