2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11

8.18. 域型別 #

域(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

提交更正

如果您在文件中發現任何不正確之處,與您在使用特定功能時的實際情況不符,或者需要進一步的澄清,請使用 此表單 來報告文件問題。