PostgreSQL enum 数据类型介绍

PostgreSQL enum 数据类型是一种用于定义枚举类型的数据类型。它允许您将一组可能的值作为一个命名的列表来定义,并将这个列表与列或表单元格关联起来。在 PostgreSQL 中,enum 类型本质上是一个具有标签的整数值集合,这些标签是用户定义的。

语法

创建 enum 类型的语法如下所示:

CREATE TYPE enum_type AS ENUM ('label1', 'label2', ...);

其中 enum_type 是用户定义的类型名称,后面跟着一个由逗号分隔的标签列表。

定义 enum 类型的列的语法如下所示:

column_name enum_type

在表中定义 enum 列的语法如下所示:

CREATE TABLE table_name (
    ...
    column_name enum_type,
    ...
);

使用场景

enum 数据类型适合用于一组预定义的可能值的情况。例如,如果您的应用程序需要在一个列中存储红、绿、蓝三种颜色的值,那么您可以定义一个 enum 类型来表示这些颜色,并将其应用于这个列。使用 enum 数据类型可以确保只有预定义的值被插入到列中,这可以避免数据的不一致性。

另一个适合使用 enum 类型的场景是在应用程序中需要使用状态的情况。例如,如果您的应用程序需要维护订单状态,那么您可以定义一个 enum 类型,其中包含订单可能的状态(如“已接受”、“已发货”、“已付款”等),并将其应用于订单表中的状态列。

示例

示例 1

以下是一个 enum 类型的示例:

CREATE TYPE color AS ENUM ('red', 'green', 'blue');

在上面的示例中,我们创建了一个名为 colorenum 类型,其中包含三种颜色。

我们可以在表中使用该类型来定义列,例如:

CREATE TABLE products (
    ...
    color color,
    ...
);

接下来,我们可以插入具有预定义颜色值的记录,例如:

INSERT INTO products (name, price, color)
VALUES ('Product 1', 10.99, 'red'),
       ('Product 2', 15.99, 'green'),
       ('Product 3', 20.99, 'blue');

示例 2

以下是一个 enum 类型在订单状态中的示例:

CREATE TYPE order_status AS ENUM ('pending', 'paid', 'accepted', 'shipped', 'completed');

在上面的示例中,我们创建了一个名为 order_statusenum 类型,其中包含订单可能的状态。

我们可以在订单表中使用该类型来定义状态列,例如:

CREATE TABLE orders (
    ...
    status order_status,
    ...
);

接下来,我们可以将订单状态转换为paidcancelled,并查看表中的数据。

UPDATE orders SET status = 'paid' WHERE id = 1;
UPDATE orders SET status = 'cancelled' WHERE id = 3;
SELECT * FROM orders;

执行上述 SQL 语句后,我们可以得到如下结果:

 id | customer_id |  amount   |   status
----+-------------+-----------+-------------
  1 |           1 | 1000.00   | paid
  2 |           2 | 2000.00   | pending
  3 |           3 | 3000.00   | cancelled
(3 rows)

我们可以看到,status 列中的值已经被更新为paidcancelled

结论

PostgreSQL 的 enum 数据类型提供了一种方便的方式来表示具有固定值集合的列。它可以在表中定义为列类型,可以包含一个或多个可能的值,并可以在表创建时指定或通过修改表结构添加。 enum 数据类型可用于多种场景,如状态列、类别列等。在查询中,可以使用 =<> 等运算符来比较 enum 值。同时,也可以通过修改枚举类型来添加、删除或重新命名枚举值。