↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11
历史版本。 PostgreSQL 13 已结束支持。 2025-11-13. 请参阅 当前版本手册.

8.18. 域类型 #

域是一种用户定义的数据类型,它基于另一种底层类型。根据需要,它可以有约束来限制其有效值为底层类型所允许值的一个子集。除此之外,它的行为与底层类型相同 — 例如,任何适用于底层类型的操作符或函数都对该域类型有效。底层类型可以是任何内置或者用户定义的基础类型、枚举类型、数组类型、复合类型、范围类型或者另一个域。

例如,我们可以基于整数创建一个只接受正整数的域:

CREATE DOMAIN posint AS integer CHECK (VALUE > 0);
CREATE TABLE mytable (id posint);
INSERT INTO mytable VALUES(1);   -- 成功
INSERT INTO mytable VALUES(-1);  -- 失败

当底层类型的一个操作符或函数被应用于一个域值时,域会被自动向下转换为底层类型。因此,mytable.id - 1 的结果会被认为是类型 integer 而不是 posint。我们可以写成(mytable.id - 1)::posint 来把结果转换回 posint,这会导致域的约束被重新检查。在这种情况下,如果该表达式被应用于一个值为 1 的 id 就会报错。把底层类型的值赋给域类型的一个字段或者变量不需要写显式的类型转换,但是域的约束将会被检查。

更多信息请参考 CREATE DOMAIN。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.