PostgreSQL 用户定义的数据类型 PostgreSQL Array PostgreSQL 架构 PostgreSQL 用户定义的数据类型 在本节中,我们将在CREATE DOMAIN 和 CREATE TYPE命令的帮助下了解PostgreSQL 用户定义数据类型的工作,并查看它的示例。 什么是 PostgreSQL 用户自定义数据类型? 除了内置数据类型,PostgreSQL还为我们提供了在以下命令的帮助下生成用户定义的数据类型: 命令 描述 CREATE DOMAIN 它生成带有约束的用户定义数据类型,例如,CHECK、NOT NULL 等。 CREATE TYPE create type 命令用于生成复合类型,根据返回值的数据类型在存储过程中使用。 现在,让我们看看CREATE DOMAIN和CREATE TYPE命令如何用于 PostgreSQL 用户定义数据。 PostgreSQL CREATE DOMAIN 命令 在 PostgreSQL 中,域在模式范围内具有唯一名称,因为域是具有选择性约束(例如CHECK、NOT NULL)的数据类型。为了巩固具有共同约束的字段的组织,域总是有益的。 例如,假设我们有一些包含类似列的表,该列不接受 NULL 和空格。 换句话说,我们可以说某些表可能包含文本列,这些列需要一个 CHECK 约束来确保值不为空并保持用空格扩展。 域数据类型示例 让我们看一个示例以了解Domain 数据类型的工作原理。 我们正在使用 CREATE 命令的帮助创建一个作为收件人的\新表,并使用 INSERT 命令插入一些值。 要将收件人\创建到组织数据库中,我们使用CREATE命令。 该收件人\表包含以下几列,如Recipient_id,名字,姓氏和电子邮件。 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' ) ); 输出 执行上述命令时,我们将收到以下消息,显示已成功将Recipients\表创建到Organization数据库中。 我们在上表中使用了CHECK 约束,即First_name和Last_name列不接收空格和空值。 因此,在这里我们可以创建 as person_name域并在各个列中重用它来定义 CHECK 约束。 在下面的命令中,我们使用CREATE DOMAIN命令生成一个名为person_name的新域,该域使用不带空格和 NULL 值的VARCHAR 数据类型: CREATE DOMAIN person_name AS VARCHAR NOT NULL CHECK (value!~ '\s'); 输出 执行上述命令后,我们将得到以下消息窗口,显示已成功为Recipients\表创建了person_name*域*。 创建域后,我们可以使用person_name域作为First_name和Last_name列的数据类型作为一致的内置类型,如以下命令所示: CREATE TABLE Recipients1 ( Recipient_ID SERIAL PRIMARY KEY, First_name person_name, Last_name person_name, Email VARCHAR NOT NULL ); 输出 执行上述命令后,我们将得到如下消息窗口,显示已成功创建Recipients\ 1 表。 笔记: 创建域后,请确保两个表必须具有不同的名称,因为它采用相同的表名称 ( Recipients )。 PostgreSQL 引发以下错误关系“收件人”已经存在,如下面的屏幕截图所示: 一旦Recipients1\表已经创建成功,我们将插入使用一些值INSERT命令。 在下面的命令中,我们将一些值插入到Recipients1\表中。 INSERT INTO Recipients (First_name, Last_name, Email) VALUES('Mike',' W Ross','rossmike11@gmail.com'); 输出 执行上述命令后,PostgreSQL为关系“recipients”违反检查约束“recipients_check”引发以下错误,因为last_name列包含空格,如下面的屏幕截图所示: 为了解决上述错误,我们将提供Last_name而不提供任何空格,如以下命令所示: INSERT INTO Recipients (First_name, Last_name, Email) VALUES('Mike','Ross','rossmike11@gmail.com'); 输出 成功执行上述命令后,我们将得到以下消息窗口,其中显示特定值已插入到Recipients\表中。 在 psql 中查看域 我们将按照以下过程在psql 中查看域: 步骤1 首先,我们将在我们的本地系统中打开psql,我们将连接到我们要创建表的数据库。 第2步 为了连接组织数据库,我们将输入以下命令: postgres=# \c Organization 输出 执行上述命令后,我们将得到以下输出: Step3 现在,我们将输入以下命令来查看组织数据库中的域。 Organization=# \dD 输出 执行上述命令后,我们将得到以下输出,其中显示了现有域,即组织数据库中的person_name: 删除/更改域 我们可以单独使用DROP DOMAIN 或 ALTER DOMAIN命令来删除或修改域。 DROP DOMAIN IF EXISTS person_name; 输出 执行上述命令后,我们将收到以下错误消息:我们不能删除类型 person_name 因为其他对象依赖于它。 因此,在上面的命令中,我们使用了CASCADE,因为它用于自动删除依赖于表的对象。 DROP DOMAIN IF EXISTS person_name CASCADE; 输出 执行上述命令后,我们会得到如下结果,显示person_name域已成功删除。 PostgreSQL CREATE TYPE 命令 PostgreSQL CREATE TYPE 命令为我们提供了一个复合类型,可以用作函数的返回类型。 例如:如果我们想要一个函数,它返回几个值:item_id、item_name 和 item_price 步骤1 首先,我们将创建一个类型,例如Item_details,\我们可以在以下命令中看到: CREATE TYPE Item_details AS ( item_id INT, item_name VARCHAR, item_price Numeric(5,2) ); 输出 执行完上面的命令后,我们会得到如下消息窗口,说明item_details类型已经创建成功。 第2步 之后,我们将使用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; 输出 执行上述命令后,我们将得到以下消息窗口,显示该函数已创建成功。 Step3 最后,我们将在SELECT命令的帮助下调用get_Item_details()函数: SELECT * FROM get_Item_details(3); 输出 执行上述命令后,我们将获得以下输出,其中显示了特定的 id 项,即Audi A7。 删除/更改类型 就像我们使用Drop domain命令删除Domain一样,我们可以使用DROP TYPE命令删除用户定义的数据类型,我们可以使用ALTER TYPE命令修改用户定义的数据类型。 DROP TYPE IF EXISTS Item_details; 输出 我们将得到与上述类似的错误(删除域),我们无法删除类型 Item_details,因为其他对象依赖于它执行上述命令。 为了解决上述错误,我们使用了CASCADE,因为它用于自动删除依赖于表的对象。 DROP TYPE IF EXISTS Item_details CASCADE; 输出 执行完上面的命令后,我们会得到下面的消息窗口,显示指定的类型已经成功删除。 在 psql 中查看 TYPE 如果我们使用 psql 程序,我们可以借助以下命令列出现有数据库中的所有用户定义类型: \dT or \dT+ 例如,我们将按照以下过程在psql 中查看类型: 步骤1 首先,我们将在我们的本地系统中打开psql,我们将连接到我们要创建表的数据库。 第2步 为了连接组织数据库,我们将输入以下命令: postgres=# \c Organization Step3 现在,我们将输入以下命令来查看组织数据库中的域。 Organization=# \dT 输出 执行上述命令后,我们将得到以下输出,其中显示了现有的 TYPE,即组织数据库中的Item_details: Organization=# \dT+ 输出 执行上述命令后,我们将得到以下输出,其中显示了现有的 TYPE,即Organization数据库中存在的Item_details: 概述 在PostgreSQL 用户定义数据类型部分到最有用的操作中,我们学习了以下主题: PostgreSQL用户定义的数据类型被用来生成用户定义的数据类型的帮助下创建DOMAIN和CREATE TYPE CREATE DOMAIN命令用于产生具有约束,诸如用户定义的数据类型CHECK,NOT NULL等 和CREATE TYPE命令用于产生复合型,其在使用存储过程按照数据类型返回的值。 为了在 PSQL 中查看新创建的 DOMAIN,我们使用了\dD 我们已经使用\dT 或\dT+命令在PSQL 中查看新生成的TYPE。 我们已经使用DROP DOMAIN 命令删除用户自定义数据类型,我们可以使用ALTER DOMAIN命令修改用户自定义数据类型。 并且我们还使用了DROP TYPE 或 ALTER TYPE命令来移除和删除用户定义的类型。 PostgreSQL Array PostgreSQL 架构