【问题标题】:Altering Enum type in Postgres gets 42883 error在 Postgres 中更改枚举类型会出现 42883 错误
【发布时间】:2023-01-20 21:00:47
【问题描述】:

我正在尝试回滚在 Postgres 中对这个名为 group_type 的枚举所做的添加,该添加是对我的表组中名为 type 的列所做的。

在我跑过的 Postgres 中,

ALTER TYPE group_type RENAME TO group_type_old;
CREATE TYPE group_type AS ENUM ('public', 'private');
ALTER TABLE groups ALTER COLUMN type DROP DEFAULT;
ALTER TABLE groups ALTER COLUMN "type" TYPE group_type USING "type"::text::group_type;

我在最后一条语句中收到以下错误,

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

知道我最后的陈述有什么问题吗?

【问题讨论】:

  • 如果您没有走上非规范化道路,您可以使用简单的 DELETE 语句解决该问题。
  • 哪一部分是反规范化或重复数据?在我开始使用这个数据库之前,该列被命名为“类型”,这也是一个关键字。这可能是问题的一部分吗?
  • 使用枚举是去规范化
  • 什么版本的 Postgres?它是 Postgres 的社区版本还是 AWS 的分支?你在什么客户端运行代码?添加答案作为问题的更新。
  • 它是使用 12.3 的 Postgres 本地版本,通过 Elixir 应用程序和使用 TablePlus 应用程序运行迁移时会遇到相同的错误。

标签: postgresql enums


【解决方案1】:

您的代码按预期工作。即使在 Postgresql 9.6 中也没有问题!

  • Postgresql 14 demo

  • Postgresql 9.6 demo
    我通常将其包装在交易中。

    begin;
    ALTER TYPE group_type RENAME TO group_type_old;
    CREATE TYPE group_type AS ENUM ('sad', 'ok','happy','happy1');
    ALTER TABLE groups ALTER COLUMN type DROP DEFAULT; ALTER TABLE groups ALTER COLUMN "type" TYPE group_type USING "type"::text::group_type;
    drop type group_type_old;
    commit;

【讨论】:

  • 使用 Postgres 12.3,通过 Elixir 应用程序和应用程序 TablePlus 进行迁移时会出现错误。我试过你用 Postgres 12 发布的演示应用程序,它似乎也运行良好,还有什么我可以检查你知道的问题的吗?
  • 您也可以将您的部分数据复制到 db fiddle uk 进行测试。如果数据测试没问题,再检查其他表相关对象。
  • 谷歌搜索。我得到 stackoverflow.com/questions/35188497/… 也许对你有帮助。 @威廉罗斯
  • @WilliamRoss 等等。什么是原始枚举元素。
  • 原始枚举创建为:CREATE TYPE group_type AS ENUM ('public', 'private')。找到了一个目前已经足够好的 hackish 回滚解决方法。给你帮助的赏金,谢谢。
【解决方案2】:

物有所值;当我的表中仍然提到旧枚举的值作为 CHECK 约束时,我遇到了这个错误,该枚举也在一列中。 我通过删除约束、更改枚举然后再次添加(更新的)约束来解决它。

【讨论】:

    猜你喜欢
    • 2021-01-08
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多