PostgreSQL 枚举数据类型
本文介绍 PostgreSQL 枚举数据类型和它的用法。
PostgreSQL 枚举类型介绍
在 PostgreSQL 中,枚举类型是是一组有序的常量值的集合。比如,您可以使用枚举类型用作订单的状态值。
如果没有枚举类型,您可能使用整数 1, 2, 3 ...
或者字符串表示,但是很容易带来错误,比如书写错误等。用了枚举类型之后,数据库可以保证不能输入错误的值。
创建 PostgreSQL 枚举值
要使用枚举值,您需要使用 CREATE TYPE
语句创建一个自定义的枚举值。
这里是创建枚举类型的语法:
CREATE TYPE name AS ENUM (
label_1
[, label_2, ... ]
);
其中,
name
是要创建的枚举类型的名称。label_1
,label_2
是枚举类型中的常量值。
PostgreSQL 枚举类型实例
首先,使用下面的语句创建一个表示星期的枚举类型:
CREATE TYPE my_week AS ENUM (
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday',
'Sunday'
);
然后,使用下面的语句创建一个每天销售明细表,
CREATE TABLE week_day_sales (
id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
week_day my_week NOT NULL,
sales integer NOT NULL
);
然后,使用下面的语句插入几个新行:
INSERT INTO week_day_sales (week_day, sales)
VALUES
('Monday', 110),
('Tuesday', 120),
('Wednesday', 130),
('Thursday', 140),
('Friday', 150),
('Saturday', 160),
('Sunday', 170),
('Monday', 210),
('Tuesday', 220),
('Wednesday', 230),
('Thursday', 240),
('Friday', 250),
('Saturday', 260),
('Sunday', 270);
如果您向枚举列插入一个错误的值, PostgreSQL 将给出一个错误:
INSERT INTO week_day_sales (week_day, sales)
VALUES ('Error', 110);
ERROR: invalid input value for enum my_week: "Error"
LINE 2: VALUES ('Error', 110);
下面的语句检索 week_day_sales
表的所有的行:
SELECT * FROM week_day_sales;
id | week_day | sales
----+-----------+-------
1 | Monday | 110
2 | Tuesday | 120
3 | Wednesday | 130
4 | Thursday | 140
5 | Friday | 150
6 | Saturday | 160
7 | Sunday | 170
8 | Monday | 210
9 | Tuesday | 220
10 | Wednesday | 230
11 | Thursday | 240
12 | Friday | 250
13 | Saturday | 260
14 | Sunday | 270
(14 rows)
要按照枚举类型的值的顺序排序,请使用下面的语句:
SELECT * FROM week_day_sales ORDER BY week_day;
id | week_day | sales
----+-----------+-------
1 | Monday | 110
8 | Monday | 210
2 | Tuesday | 120
9 | Tuesday | 220
3 | Wednesday | 130
10 | Wednesday | 230
4 | Thursday | 140
11 | Thursday | 240
5 | Friday | 150
12 | Friday | 250
6 | Saturday | 160
13 | Saturday | 260
7 | Sunday | 170
14 | Sunday | 270
(14 rows)
PostgreSQL 枚举函数
PostgreSQL 提供了几个用于枚举类型的函数:
enum_first()
函数返回由参数指定的枚举类型的第一个枚举值。enum_last()
函数返回由参数指定的枚举类型的最后一个枚举值。enum_range()
函数返回由参数指定的枚举类型的所有枚举值,或者指定的范围内的枚举值。
结论
在 PostgreSQL 中,枚举类型是是一组有序的常量值的集合。