PostgreSQL创建枚举类型和修改枚举值

1.说明

在postgresql中可以定义枚举数据类型,但是它可以增加和修改枚举值,不能删除已经定义好的枚举值

2.创建枚举类型

创建枚举类型的语法如下,注意枚举类型的顺序就是枚举值的顺序

CREATE TYPE order_status_enum AS ENUM ('START','WAIT_ACCOUNT');

在表中使用枚举值

CREATE TABLE "public"."order" (
"id" int4 NOT NULL DEFAULT nextval('order_id_seq'::regclass),
"status" "public"."order_status_enum" NOT NULL DEFAULT 'START'::order_status_enum,
);

3.增加和修改枚举值

如果你想要在已经定义好的枚举类型中添加新的枚举值,以使用下面的写法

ALTER TYPE order_status_enum ADD VALUE 'END';

4.修改枚举值

如果你对某个枚举值不满意,可以直接修改它

ALTER TYPE order_status_enum RENAME VALUE 'END' TO 'FINISH';

5.删除枚举值

如果想要删掉某个枚举值,操作方法是,重新定义一个枚举类型替换掉原有的枚举类型,比如说我这里有一个order表,它的status字段是名为order_status_enum的枚举类型

# 1.将原有枚举改名
ALTER TYPE "public"."order_status_enum" RENAME TO "order_status_enum2";

# 2.创建同名枚举类型
CREATE TYPE order_status_enum AS ENUM ('START');

# 3.修改拥有者
ALTER TYPE "public"."order_status_enum" OWNER TO "postgres";

# 4.如果字段有设置默认值。要先删除掉,请先备份好数据
ALTER TABLE "order" ALTER COLUMN status DROP DEFAULT;

# 5.修改字段的枚举类型
ALTER TABLE "public"."order" ALTER COLUMN "status" TYPE "order_status_enum" USING "status"::text::order_status_enum;

# 6.重新设置默认值(如果有需要)
ALTER TABLE "order" ALTER COLUMN status SET DEFAULT 'START';

# 7.删掉旧的枚举类型
DROP TYPE "public"."order_status_enum2";