Domains
域 是一种用户定义的数据类型,它基于另一种 底层类型 。根据需要,它可以有约束来限制其有效值为底层类型所允许值的一个子集。除此之外,它的行为与底层类型相同 — 例如,任何适用于底层类型的操作符或函数都对该域类型有效。底层类型可以是任何内置或者用户定义的基础类型、枚举类型、数组类型、复合类型、范围类型或者另一个域。
当前查看 PostgreSQL 18.6。
PG10–20 核心源码清单。类型转换与操作符类列出源码显式声明的关系;缺少记录不能排除通过其他机制进行转换或使用索引。
定义
域 是一种用户定义的数据类型,它基于另一种 底层类型 。根据需要,它可以有约束来限制其有效值为底层类型所允许值的一个子集。除此之外,它的行为与底层类型相同 — 例如,任何适用于底层类型的操作符或函数都对该域类型有效。底层类型可以是任何内置或者用户定义的基础类型、枚举类型、数组类型、复合类型、范围类型或者另一个域。
Domains
- 对象边界
- 用户定义类型族;不代表用户对象的有限清单
中文手册
阅读来源定义
8.18. 域类型
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,这会导致域的约束被重新检查。在这种情况下,如果该表达式被应用于一个值为1的id就会报错。把底层类型的值赋给域类型的一个字段或者变量不需要写显式的类型转换,但是域的约束将会被检查。
更多信息请参考CREATE DOMAIN。
版本比较
PostgreSQL 17.11 → 18.6。属性比较不包含构建标识和说明正文;原始目录字段与源描述保留原文。
这两个样本的系统目录和结构化属性没有变化。
这些构建的文档也有差异,请查看对应版本的手册定义。
文档与源码
- 构建
- 18.6 · https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2
- 指纹
555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f
全部数据类型 · 下载此版本 JSON · 最早收录的样本不代表该类型的实际引入版本。