PostgreSQL教程

PostgreSQL 定义数据类型

在本节中,我们将在帮助下了解 PostgreSQL用户定义的数据类型的工作原理 CREATE DOMAIN and CREATE TYPE 命令,并查看它的 示例

什么是PostgreSQL用户定义的数据类型?

除了内置的 数据类型之外, PostgreSQL 还为我们提供了借助以下命令生成 用户定义的数据类型:
命令 说明
CREATE DOMAIN 它将生成具有约束的用户定义数据类型,例如CHECK,NOT NULL等。
CREATE TYPE create type命令用于生成复合类型,根据返回值的数据类型在存储过程中使用该复合类型。
现在,让我们看看 CREATE DOMAIN CREATE TYPE 命令如何用于PostgreSQL用户定义的数据。

PostgreSQL CREATE DOMAIN命令

在PostgreSQL中,域在模式范围内具有唯一的名称,因为 Domain 是具有 选择性约束的数据类型>,例如 CHECK,NOT NULL 。对于合并具有共同约束的字段的组织,域始终是有益的。
例如,假设我们有一些包含相似列的表,这些列不包含NULL和空格。
换句话说,我们可以说某些表可能包含text列,这些列需要CHECK约束来确保值不为null并保持空格扩展。

域数据类型的示例

让我们看一个示例示例,以了解 域数据类型的工作原理。
我们正在创建一种在CREATE命令的帮助下以 收件人 的形式创建新表,并使用INSERT命令插入一些值。
要创建 收件人进入 组织数据库,我们使用 CREATE 命令。
收件人 表包含以下列,例如 Recipient_id,First_name,姓氏和电子邮件。
CREATE TABLE Recipients (
Recipient_ID SERIAL PRIMARY KEY,
    First_name VARCHAR NOT null,
    Last_name VARCHAR NOT null,
    Email VARCHAR NOT null,
    CHECK (
      First_name !~ '\s'
      AND Last_name !~ '\s'
    )
);
输出
在执行上述命令时,我们将收到以下消息,该消息显示 收件人 表已成功创建到 Organization 数据库中。
PostgreSQL用户-定义的数据类型
我们在上表中使用了 CHECK约束,其中 First name Last_name 列未收到 空格和空值。
因此,在这里,我们可以创建为 person_name 域,并在各个列中重用它来定义CHECK约束。
在下面的命令中,我们使用 CREATE DOMAIN 命令使用 VARCHAR数据类型生成一个名为 person_name 的新域不使用空格和NULL值:
CREATE DOMAIN person_name AS 
 VARCHAR NOT null CHECK (value!~ '\s');
输出
执行上述命令后,我们将获得以下消息窗口,其中显示 person_name 收件人 表成功创建了strong>。
PostgreSQL用户定义的数据类型
创建域后,我们可以使用 person_name 域作为 Firstname Last_name 列作为一致的内置类型,如下面的命令所示:
CREATE TABLE Recipients1 (
Recipient_ID SERIAL PRIMARY KEY,
    First_name person_name,
    Last_name person_name,
    Email VARCHAR NOT null
    );
输出
执行上述命令后,我们将获得以下消息窗口,其中显示 收件人 已成功创建1个表。
PostgreSQL用户定义的数据类型
注意:
创建域后,请确保两个表都必须具有不同的名称,因为它具有表的相同名称(收件人)。 PostgreSQL引发以下错误关系"收件人"已经存在,如以下屏幕截图所示: PostgreSQL用户定义的数据类型
一旦 Recipients1 表已成功创建,我们将使用 INSERT 命令。
在下面的命令中,我们将一些值插入 Recipients1 表中。
INSERT INTO Recipients (First_name, Last_name, Email)
VALUES('Mike',' W Ross','rossmike11@gmail.com');
输出
执行上述命令后,PostgreSQL引发以下错误 关系"收件人"的新行违反了检查约束" recipients_check" 因为 last_name 列包含空格,如下面的屏幕快照所示:
PostgreSQL用户定义的数据类型
要解决上述错误,我们将提供 Last_name ,而无需提供任何空格,如以下命令所示:
INSERT INTO Recipients (First_name, Last_name, Email)
VALUES('Mike','Ross','rossmike11@gmail.com');
输出
成功执行以上命令后,我们将获得以下消息窗口,该窗口显示特定值已插入 收件人 表。
PostgreSQL用户定义的数据类型

在psql中查看域

我们将按照以下过程在 psql中查看域:
Step1
首先,我们将在本地系统中打开 psql ,然后连接到要创建表的数据库。
Step2
要连接 Organization 数据库,我们将输入以下命令:
postgres=# \c Organization 
输出
执行上述命令后,我们将获得以下输出:
PostgreSQL用户定义的数据类型
Step3
现在,我们将输入以下命令来查看 组织数据库中的域。
Organization=# \dD
输出
在执行上述命令时,我们将获得以下输出,其中显示了现有域,即存在于其中的 person_name 组织数据库:
PostgreSQL用户定义的数据类型

DROP/ALTER域

我们可以分别使用 DROP DOMAIN或ALTER DOMAIN 命令删除或修改域。
DROP DOMAIN if EXISTS person_name;
输出
执行上面的命令后,我们将收到以下错误消息: 我们不能删除类型person_name,因为其他对象依赖于此。
PostgreSQL用户定义的数据类型
因此,在上述命令中,我们使用 CASCADE ,因为它用于自动删除对象,具体取决于表格。
DROP DOMAIN if EXISTS person_name CASCADE;
输出
执行上述命令后,我们将得到以下结果,显示 person_name 域已成功删除。
PostgreSQL用户定义的数据类型

PostgreSQL创建类型命令

PostgreSQL CREATE TYPE命令为我们提供了一个 复合类型,该复合类型可用作函数的返回类型。
例如: : 如果我们想要一个函数,该函数返回多个值: 项目_id,item_name和item_price
Step1
首先,我们将 创建类型,例如 Item_details ,如下面的命令所示:
CREATE TYPE Item_details AS (
    item_id INT,
    item_name VARCHAR,
    item_price Numeric(5,2)
);
输出
执行上述命令后,我们将获得以下消息窗口,该窗口显示 item_details类型已成功创建
PostgreSQL用户定义的数据类型
Step2 >
此后,我们将使用 item_details 数据类型作为函数的返回类型,如以下命令所示:
CREATE OR REPLACE FUNCTION get_Item_details (I_id INT) 
    RETURNS Item_details AS 
$ 
SELECT item_id, item_name,  item_price 
FROM items
WHERE item_id = I_id ; 
$ 
LANGUAGE SQL;
输出
执行上述命令后,我们将显示以下消息窗口,显示该函数已成功创建。
PostgreSQL用户定义的数据类型
Step3
在最后,我们将在 SELECT 命令的帮助下调用 get_Item_details()函数:
SELECT * FROM get_Item_details(3);
输出
在执行上述命令时,我们将获得以下输出,其中显示特定的ID项目,即 Audi A7
PostgreSQL用户定义的数据类型

DROP/ALTER TYPE

就像我们使用 Drop domain 命令删除一样在域中,我们可以使用 DROP TYPE命令删除用户定义的数据类型,并且可以使用 ALTER TYPE 命令修改用户定义的数据类型。
DROP TYPE if EXISTS Item_details;
输出
我们将得到与上面类似的错误(放置域), 我们不能删除类型Item_details,因为其他对象依赖于它
PostgreSQL用户定义的数据类型
要解决发生上述错误时,我们使用 CASCADE ,因为它用于自动删除对象,具体取决于表。
DROP TYPE if EXISTS Item_details CASCADE;
输出
执行上述命令后,我们将获得以下消息窗口,该窗口显示指定的类型已成功删除。
PostgreSQL用户定义的数据类型

在psql中查看类型

如果使用的是psql程序,则可以在以下命令的帮助下列出现有数据库中所有用户定义的类型:
 \dT or \dT+
例如,我们将按照以下过程在 psql中查看类型:
Step1
首先,我们将在本地系统中打开 psql ,然后连接到要创建表的数据库。
Step2
要连接 组织数据库,我们将输入以下命令:
postgres=# \c Organization 

PostgreSQL用户定义的数据类型
Step3
现在,我们将输入以下命令以查看 Organization 数据库中的域。
Organization=# \dT
输出
在执行上述命令时,我们将获得以下输出,其中显示了现有的TYPE,该类型为 Item_details 组织数据库:
PostgreSQL用户定义的数据类型
Organization=# \dT+
输出
执行上面的命令后,我们将获得以下输出,该命令显示了现有的TYPE,该类型是 Item_details 组织数据库:
PostgreSQL用户定义的数据类型

概述

在最有用的操作的 PostgreSQL用户定义数据类型部分中,我们学习了以下主题:
PostgreSQL用户定义数据类型用于在 Create DOMAIN and CREATE TYPE Create DOMAIN and CREATE TYPE 创建用户定义数据类型 CREATE DOMAIN (创建域)命令用于生成具有诸如 CHECK,NOT NULL 等约束的用户定义数据类型。 创建类型命令用于生成复合类型,根据返回值的数据类型在存储过程中使用该复合类型。 要在PSQL中查看新创建的DOMAIN,我们使用了 \ dD 我们已使用 \ dT或\ dT + 命令在PSQL中查看新生成的TYPE。 我们已经使用 DROP DOMAIN命令删除用户定义的数据类型,并且可以使用 ALTER DOMAIN 命令来修改用户定义的数据类型。 我们还使用了 DROP TYPE或ALTER TYPE 命令删除和删除用户定义的类型。
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4