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

提交更正

如果您在文档中发现任何不正确之处,与您在使用特定功能时的实际情况不符,或者需要进一步的澄清,请使用 此表单 来报告文档问题。