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 DOMAIN或DROP DOMAIN 。
要获取当前数据库中的所有域,请使用以下命令:
\dD
输出: