首页 > 解决方案 > 在 Postgres 上删除枚举值是否有限制

问题描述

我正在尝试从 Postgres 中的枚举中删除一个值,但它一直失败。我之前已经做过很多次了,没有任何问题,所以我不确定是否发生了变化,或者我是否遇到了一些极端情况限制。

这是我正在运行的(删除 enum FOURTH):

ALTER TYPE "my_enum" RENAME TO "my_enum_old";
CREATE TYPE "my_enum" AS ENUM('FIRST', 'SECOND', 'THIRD', 'FIFTH');
ALTER TABLE "my_Table" ALTER COLUMN "my_column" TYPE "my_eum" USING "my_column"::"text"::"my_enum";
DROP TYPE "my_enum_old";

也许枚举名称的长度有大小限制?我们的完整枚举名称是以下长度(Xs 用于隐藏真实姓名)XXXXXXXXXXXXX_XXXXXXX_XXXXXXXX_XXXXXXXXX_XXXXXXXX_XXXXX_XXXX 并且添加old到末尾时会添加另一个_OLD.

返回的错误是

ERROR:  operator does not exist: my_enum = my_enum_old
HINT:  No operator matches the given name and argument types. You might need to add explicit type casts.

标签: postgresqlenums

解决方案


最可能的问题是您对表有一个检查约束,它执行以下操作:

 check (not(my_column = 'FOURTH'::my_enum_old)));

一旦 my_column 更改类型,就无法再检查该约束。只需放弃约束。


推荐阅读