Postgresql 9.1 枚举类型排序不像我预期的那样工作

标签 postgresql enums postgresql-9.1

我有一个枚举类型,我对以特定方式排序很感兴趣。我编写并运行了 SQL,通过根据我的新标准对标签(外部)进行排序,然后更新所有值的 enumsortorder 来实现新的排序。

这是行不通的。我已经验证我已经满足(真的很奇怪)规则,即排序顺序功能仅适用于具有偶数 oid 的枚举类型;我对这种类型的 oid 是偶数 (58016)。据我所知,当我ORDER BY 枚举列时所施加的顺序与之前的顺序完全相同。

为了完成这项工作,我还需要做些什么吗? PostgreSQL 文档让我认为它应该可以工作。

最佳答案

Even oids have fixed ordering所以你不能通过修改 pg-enum 系统表来重新排序它们。

您将不得不用新的枚举类型替换现有的枚举。这意味着

  1. 创建一个新的枚举类型
  2. 删除任何使用枚举的关系。
  3. 使用类似的方法将列更新为新类型

    ALTER TABLE foo ALTER COLUMN 栏 类型为 new_enum_type 使用 (bar::text)::new_enum_type;

    此处转换为文本将新枚举值与旧枚举值按名称匹配。

  4. 最后,您需要重新创建所有丢弃的关系。

如果需要,您可以在事务 block 内运行所有这些 DML。

如果您有大量数据,预计它会很慢,因为它正在重写整个 表格

关于Postgresql 9.1 枚举类型排序不像我预期的那样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28114410/

相关文章:

sql - 跨两个表执行 UPDATE SET

django - 如何使用 Django 保存到远程服务器

postgresql - 在 postgresql 中创建断言

ios - Swift:无法打开枚举关联值

java - 从枚举填充 Swing JComboBox

python - 将 OFTInteger 转换为 Decimal 时 Django 错误

java - JDBC Postgres 驱动程序是否有办法设置 "client_encoding"以连接到数据库?

c++ - 从匿名结构访问枚举条目

entity-framework-4 - 如何通过连接使用Entity Framework + PostgreSQL?

sql - 将文件插入 Postgres 数据库