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 数据库中。
我们在上表中使用了
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>。
创建域后,我们可以使用
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引发以下错误关系"收件人"已经存在,如以下屏幕截图所示:
一旦
Recipients1 表已成功创建,我们将使用
INSERT 命令。
在下面的命令中,我们将一些值插入
Recipients1 表中。
INSERT INTO Recipients (First_name, Last_name, Email)
VALUES('Mike',' W Ross','rossmike11@gmail.com');
输出
执行上述命令后,PostgreSQL引发以下错误
关系"收件人"的新行违反了检查约束" recipients_check" 因为
last_name 列包含空格,如下面的屏幕快照所示:
要解决上述错误,我们将提供
Last_name ,而无需提供任何空格,如以下命令所示:
INSERT INTO Recipients (First_name, Last_name, Email)
VALUES('Mike','Ross','rossmike11@gmail.com');
输出
成功执行以上命令后,我们将获得以下消息窗口,该窗口显示特定值已插入
收件人 表。
在psql中查看域
我们将按照以下过程在
psql中查看域:
Step1
首先,我们将在本地系统中打开
psql ,然后连接到要创建表的数据库。
Step2
要连接
Organization 数据库,我们将输入以下命令:
postgres=# \c Organization
输出
执行上述命令后,我们将获得以下输出:
Step3
现在,我们将输入以下命令来查看
组织数据库中的域。
输出
在执行上述命令时,我们将获得以下输出,其中显示了现有域,即存在于其中的
person_name
组织数据库:
DROP/ALTER域
我们可以分别使用
DROP DOMAIN或ALTER DOMAIN 命令删除或修改域。
DROP DOMAIN if EXISTS person_name;
输出
执行上面的命令后,我们将收到以下错误消息: 我们不能删除类型person_name,因为其他对象依赖于此。
因此,在上述命令中,我们使用
CASCADE ,因为它用于自动删除对象,具体取决于表格。
DROP DOMAIN if EXISTS person_name CASCADE;
输出
执行上述命令后,我们将得到以下结果,显示
person_name 域已成功删除。
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类型已成功创建
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;
输出
执行上述命令后,我们将显示以下消息窗口,显示该函数已成功创建。
Step3
在最后,我们将在
SELECT 命令的帮助下调用
get_Item_details()函数:
SELECT * FROM get_Item_details(3);
输出
在执行上述命令时,我们将获得以下输出,其中显示特定的ID项目,即
Audi A7 。
DROP/ALTER TYPE
就像我们使用
Drop domain 命令删除一样在域中,我们可以使用
DROP TYPE命令删除用户定义的数据类型,并且可以使用
ALTER TYPE 命令修改用户定义的数据类型。
DROP TYPE if EXISTS Item_details;
输出
我们将得到与上面类似的错误(放置域),
我们不能删除类型Item_details,因为其他对象依赖于它
要解决发生上述错误时,我们使用
CASCADE ,因为它用于自动删除对象,具体取决于表。
DROP TYPE if EXISTS Item_details CASCADE;
输出
执行上述命令后,我们将获得以下消息窗口,该窗口显示指定的类型已成功删除。
在psql中查看类型
如果使用的是psql程序,则可以在以下命令的帮助下列出现有数据库中所有用户定义的类型:
例如,我们将按照以下过程在
psql中查看类型:
Step1
首先,我们将在本地系统中打开
psql ,然后连接到要创建表的数据库。
Step2
要连接
组织数据库,我们将输入以下命令:
postgres=# \c Organization
Step3
现在,我们将输入以下命令以查看
Organization 数据库中的域。
输出
在执行上述命令时,我们将获得以下输出,其中显示了现有的TYPE,该类型为
Item_details
组织数据库:
输出
执行上面的命令后,我们将获得以下输出,该命令显示了现有的TYPE,该类型是
Item_details
组织数据库:
概述
在最有用的操作的
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 命令删除和删除用户定义的类型。