【问题标题】:How to change the order of an existing postgres enum如何更改现有 postgres 枚举的顺序
【发布时间】:2019-03-22 18:27:07
【问题描述】:

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

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

我对上下文的枚举:

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

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

这可能吗?

【问题讨论】:

    标签: postgresql enums


    【解决方案1】:

    您只能将类型替换为新类型,这可能有点费力。例如:

    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;
    

    【讨论】:

      【解决方案2】:

      这是不可能的。

      Quote from the manual

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

      (强调我的)

      【讨论】:

      • 如果有人想删除并重新创建这里的一个很好的资源:@​​987654322@
      猜你喜欢
      • 2022-12-03
      • 2023-01-20
      • 1970-01-01
      • 2021-06-13
      • 2019-02-20
      • 2021-04-28
      • 1970-01-01
      • 2022-12-24
      • 1970-01-01
      相关资源
      最近更新 更多