Enum类型
枚举(ENUM)类型是包含一组静态、有序值的数据类型。它们等效于许多编程语言中支持的枚举类型。枚举类型的一个示例可能是星期几,或者是一组数据的状态值。ENUM类型能够提供可读的查询和输出。
创建和使用ENUM列
枚举值必须是带引号的字符串文字。使用enum类型主要有两种方式:
- 通过 CREATE TYPE命令创建ENUM类型,然后指定列为该类型:
CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy'); CREATE TABLE person ( name text, current_mood mood ); INSERT INTO person VALUES ('Moe', 'happy'); SELECT * FROM person WHERE current_mood = 'happy'; name | current_mood ------+-------------- Moe | happy (1 row)
-
直接在定义table的时候定义列为enum类型:
CREATE TABLE person ( name text, current_mood ENUM ('sad', 'ok', 'happy') ); INSERT INTO person VALUES ('Moe', 'happy'); SELECT * FROM person WHERE current_mood = 'happy'; name | current_mood ------+-------------- Moe | happy (1 row)
枚举文字的索引值
每个枚举值都有一个索引:
-
列规范中列出的元素分配有索引号,从 1 开始。
-
“索引”指的是枚举值列表中的一个位置。例如,指定为的列ENUM ('sad', 'ok', 'happy')将每个值产生以下索引。
枚举值 | 索引 |
---|---|
''sad' | 1 |
'ok' | 2 |
'happy'' | 3 |
在插入表格的时候,可以使用数字来代替对应的枚举值:
openGauss=# INSERT INTO person VALUES('Moe', 1);
INSERT 0 1
openGauss=# SELECT * FROM person;
name | current_mood
------+--------------
Moe | sad
(1 rows)
在使用数字时,必须是非负整数,不能是浮点数,并且数字的范围不能超过枚举类型中枚举值的个数。
NULL 枚举值
枚举值也可以是空字符串 ('') 或NULL在某些情况下:
NULL枚举值可以用三种表达方式:0,''(空字符串)和NULL.
如果将无效值插入到 ENUM(即允许值列表中不存在的字符串)中,将会报错。
使用约束
- 枚举值字符串长度最大为63个字符,超过该限制会报错。
- ENUM类型虽然可以在分区表中声明,但是不能用于分区表中作为分区依据。
- 支持行存表中定义enum类型,但是不支持列存标中进行定义。