删除值时的错误.png
场景
当使用了postgresql的枚举类型,已经有表使用了这个枚举时。因为有强关联是不能直接删除或者更改枚举项的。
解决方案
新建一个新的枚举类型去替换原有的枚举类型。
注意:如有线上项目注册了枚举类型CLR,相关项目需要释放数据库资源(重启服务)
--1. 更改原枚举名称
ALTER TYPE "public"."et_type" RENAME TO "et_type2";
--2. 创建用于替换的枚举
CREATE TYPE "public"."et_type" AS ENUM ('type1', 'type2', 'type3');
--3. 更改枚举拥有者
ALTER TYPE "public"."et_type" OWNER TO "postgres";
--4. 更改表对枚举的引用
ALTER TABLE "public"."table" ALTER COLUMN "type" TYPE "et_type" USING "type"::text::et_type;
--5. 手动删除更改名字后的枚举
DROP TYPE "public"."et_type2";