域名

基于现有数据类型创建的用户定义数据类型

一个domain(有时称为“派生类型”)是基于现有数据类型创建的用户定义数据类型,通常用于提供一种有效的通用检查约束定义,该定义可以在多个表定义中使用。

注意事项

与常规约束不同,虽然在将列转换为域名类型或插入列时会检查应用于域名的任何约束,但如果修改了域名定义,这些约束不会被追溯检查。

psql 命令

  • \dD[S+] 列出域名

变更历史

示例

创建域名

postgres=# CREATE DOMAIN git_sha1 AS
  CHAR(40) NOT NULL
  CHECK (VALUE ~ '^[0-9a-fA-F]+$');
CREATE DOMAIN

顾名思义,这定义了一个适合存储 GIT sha1 标签的域名。

列出可用的域名

postgres=# \dD
                                               List of domains
 Schema |   Name   |     Type      | Collation | Nullable | Default |                 Check                  
--------+----------+---------------+-----------+----------+---------+----------------------------------------
 public | git_sha1 | character(40) |           | not null |         | CHECK (VALUE ~ '^[0-9a-fA-F]+$'::text)
(1 row)

创建带域名的表

postgres=# CREATE TABLE object_commit_ref (
             repo TEXT NOT NULL,
             commit_ref GIT_SHA1,
             PRIMARY KEY(repo, commit_ref)
           );
CREATE TABLE

插入有效数据

postgres=# INSERT INTO repo_commit_ref 
                VALUES('postgresql', 'd31084e9d1118b25fd16580d9d8c2924b5740dff');
INSERT 0 1

尝试插入无效数据

postgres=# INSERT INTO object_commit_ref VALUES('foo', NULL);
ERROR:  domain git_sha1 does not allow null values

postgres=# INSERT INTO object_commit_ref VALUES('bar', 'baz');
ERROR:  value for domain git_sha1 violates check constraint "git_sha1_check"

分类

数据类型, 域名

另请参阅

CREATE DOMAIN, ALTER DOMAIN, DROP DOMAIN

反馈

请在此处提交关于“Domain”的任何评论、建议或更正:此处