📜  postgres 枚举类型 - SQL (1)

📅  最后修改于: 2023-12-03 14:45:34.335000             🧑  作者: Mango

Postgres 枚举类型 - SQL

在 PostgreSQL 中,枚举类型是一种用户定义的数据类型,用于定义具有有限可能取值的列。枚举类型的值由用户在创建该类型时定义,列中的值必须是这些定义的值之一。

创建枚举类型

要创建一个枚举类型,您需要使用 CREATE TYPE 命令。以下是创建名为 day_of_week 的枚举类型示例,该类型可以具有七个可能的值(星期一至星期日):

CREATE TYPE day_of_week AS ENUM (
  'Monday',
  'Tuesday',
  'Wednesday',
  'Thursday',
  'Friday',
  'Saturday',
  'Sunday'
);
使用枚举类型

创建枚举类型后,您可以在表定义中使用它作为列的数据类型。以下是一个具有 day_of_week 列的示例表定义:

CREATE TABLE meetings (
  id SERIAL PRIMARY KEY,
  name TEXT NOT NULL,
  day_of_week day_of_week NOT NULL
);

您可以使用以下语法在表中插入值:

INSERT INTO meetings (name, day_of_week) VALUES ('Project review', 'Wednesday');

您还可以使用枚举类型在 WHERE 子句中进行筛选,例如:

SELECT * FROM meetings WHERE day_of_week = 'Monday';
获取枚举类型的值

您可以使用 pg_enum 系统目录表来获取枚举类型的值列表。以下是获取 day_of_week 枚举类型中的值列表的示例查询:

SELECT enumlabel FROM pg_enum WHERE enumtypid = 'day_of_week'::regtype;

该查询将返回以下结果:

 enumlabel  
------------
 Monday
 Tuesday
 Wednesday
 Thursday
 Friday
 Saturday
 Sunday
(7 rows)
修改枚举类型

要向枚举类型中添加新值,请使用 ALTER TYPE 命令。以下是向 day_of_week 枚举类型中添加名为 Holiday 的新值的示例:

ALTER TYPE day_of_week ADD VALUE 'Holiday';

您还可以使用 DROP VALUE 子句从枚举类型中删除现有值。但是,删除枚举类型的值可能会破坏现有数据,因此请务必谨慎操作。

总结

枚举类型是一种方便且具有语义的 PostgreSQL 数据类型,它使您可以轻松地定义具有预定义可能值的列。通过使用枚举类型,您可以避免在表中使用超出预定义集合的值,并减少数据输入错误的可能性。