# 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被认为是类型整数不是定位.我们可以写(mytable.id - 1)::posint将结果转换回定位,导致重新检查域的约束。在这种情况下,如果将表达式应用于ID值 1.允许将基础类型的值分配给域类型的字段或变量,而无需编写显式强制转换,但将检查域的约束。

有关其他信息,请参阅创建域.