域是一个用户定义的数据类型,它基于另一个底层类型。可选地,它可以具有约束,将有效值限制为底层类型允许的子集。否则,它的行为类似于底层类型——例如,任何可以应用于底层类型的运算符或函数都可以应用于域类型。底层类型可以是任何内置或用户定义的基础类型、枚举类型、数组类型、复合类型、范围类型或其他域。
例如,我们可以创建一个仅接受正整数的整数域
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
,从而重新检查域的约束。在这种情况下,如果表达式已应用于值为 1 的 id
,则会导致错误。允许将底层类型的值分配给域类型的字段或变量,而无需编写显式转换,但会检查域的约束。
有关其他信息,请参阅 CREATE DOMAIN。
如果您在文档中看到任何不正确的内容、与您使用特定功能的体验不符或需要进一步澄清的内容,请使用此表单报告文档问题。