如何更改现有的postgres枚举的顺序

时间:2019-03-22 18:27:07

标签: postgresql enums

我有一个postgres枚举,想更改其默认排序顺序

我了解了pg_enum类型enumsortorder,但没有找到有关如何更改顺序的文档。

用于上下文的枚举:

CREATE TYPE day AS ENUM (
            'everyday', 
            'sunday',
            'monday',
            'tuesday',
            'wednesday',
            'thursday',
            'friday',
            'saturday'
          );

目前,当我按日检索订单时,我会从“每天”到“星期六”。我想从周一至周日获取价格,并将“每天”作为最后一个值。

这可能吗?

2 个答案:

答案 0 :(得分:0)

那不可能。

Quote from the manual

  

不能从枚举类型中删除现有值,也不能更改此类值的排序顺序,除非删除并重新创建枚举类型

(强调我的)

答案 1 :(得分:0)

您只能用新的替换该类型,这可能会有些麻烦。例如:

BEGIN;

-- drop views, functions which are using day

ALTER TYPE day RENAME TO day_old;
CREATE TYPE day AS ENUM (
        'everyday', 
        'monday',
        'tuesday',
        'wednesday',
        'thursday',
        'friday',
        'saturday',
        'sunday'
);

ALTER TABLE x ALTER my_day TYPE day USING my_day::TEXT::day;
ALTER TABLE y ALTER your_day TYPE day USING your_day::TEXT::day;
-- etc. etc.
-- Recreate views, functions which are using day
DROP TYPE day_old;

END;