📜  PostgreSQL – 创建域

📅  最后修改于: 2022-05-13 01:57:15.211000             🧑  作者: Mango

PostgreSQL – 创建域

PostgreSQL 支持使用以下语句创建用户定义的数据类型:

  • CREATE DOMAIN:它创建一个用户定义的数据类型,可以有可选的约束。
  • CREATE TYPE:它通常用于使用存储过程创建复合类型(两种或多种数据类型混合的数据类型)。

创建域:
在 PostgreSQL 中,域是一种具有可选约束的数据类型。必须具有唯一的名称和明确定义的架构范围。

例子:
首先,我们使用以下命令创建一个表(比如标记表):

CREATE TABLE marksheet (
    student_id SERIAL PRIMARY KEY,
    first_name VARCHAR NOT NULL,
    last_name VARCHAR NOT NULL,
    email VARCHAR NOT NULL,
    marks_obtained INT NOT NULL, 
    CHECK (
        first_name !~ '\s'
        AND last_name !~ '\s'
    )
);

first_name 和 last_name 字段不为空且不得包含任何空格。为了教师的简单起见,我们可以使用以下命令创建 student_detail 域:

CREATE DOMAIN student_detail AS 
    VARCHAR NOT NULL CHECK (value !~ '\s');

现在我们可以使用 student_detail 作为 first_name 和 last_name 字段的数据类型,如下所示:



CREATE TABLE marksheet (
    student_id serial PRIMARY KEY,
    first_name student_detail,
    last_name student_detail,
    marks_obtained INT NOT NULL,
    email VARCHAR NOT NULL
);

现在使用以下命令向表中插入一些数据:

INSERT INTO marksheet (first_name, last_name,marks_obtained, email)
VALUES
    (
        'Raju K',
        'Singh',
     95,
        'rajukumar@gmail.com'
    );

在这个阶段 PostgreSQL 将引发以下错误:

ERROR:  value for domain marksheet violates check constraint "marksheet_check"

因此,行为与我们预期的一样。要修改或删除域,可以分别使用ALTER DOMAINDROP DOMAIN
要获取当前数据库中的所有域,请使用以下命令:

\dD

输出: