2024年9月26日: PostgreSQL 17 发布!
支持的版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:开发版
不支持的版本:11

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

有关其他信息,请参见CREATE DOMAIN

提交更正

如果您在文档中发现任何不正确的内容,与您对特定功能的体验不符,或者需要进一步澄清,请使用此表单 报告文档问题。