我有一个枚举类型,我有兴趣以特定方式订购。我编写并运行SQL以通过我的新条件对标签(外部)进行排序,然后为所有值更新enumsortorder
来强制执行新的排序。
它不起作用。我已经证实我已经满足了(非常奇怪的)规则,即排序顺序功能仅适用于具有偶数oid的枚举类型;我的这种类型的oid是偶数(58016)。据我所知,当我ORDER BY
枚举列时所采用的排序与之前完全相同。
为了使这项工作,我还需要做些什么吗? PostgreSQL文档让我觉得它应该可行。
答案 0 :(得分:2)
Even oids have fixed ordering因此您无法通过修改pg-enum系统表对它们进行重新排序。
您将不得不用新的枚举类型替换现有的枚举。这意味着
使用
之类的内容将列更新为新类型 ALTER TABLE foo ALTER COLUMN bar
TYPE TO new_enum_type
USING (bar::text)::new_enum_type;
此处,强制转换为文本将新枚举值与旧枚举值的名称相匹配。
最后,您需要重新创建所有已删除的关系。
如果需要,您可以在事务块中运行所有这些DML。
如果你有大量的数据重写,那么预计会很慢 表