enum
PostgreSQL 9.0 和 9.1 之间的类型工作方式发生了一些奇怪的更新。该表在 PostgreSQL 9.1pg_catalog.pg_enum
中有一个新列。enumsortorder
此顺序似乎覆盖了先前基于 OID 的枚举顺序。
PostgreSQL 9.0 文档
保证特定枚举类型的 OID 以该类型应排序的方式排序,但不保证不相关枚举类型的 OID 的排序。
PostgreSQL 9.1 文档
pg_enum 行的 OID 遵循一个特殊规则:偶数 OID 保证以与其枚举类型的排序顺序相同的方式排序。也就是说,如果两个偶数 OID 属于同一个枚举类型,则较小的 OID 必须具有较小的 enumsortorder 值。奇数 OID 值与排序顺序无关。此规则允许枚举比较例程在许多常见情况下避免目录查找。创建和更改枚举类型的例程会尽可能尝试将 OID 分配给枚举值。
创建枚举类型时,会为其成员分配排序顺序位置 1..n。但是稍后添加的成员可能会被赋予负数或小数的 enumsortorder 值。对这些值的唯一要求是它们在每个枚举类型中的顺序正确且唯一。
我的问题
对于jOOQ 代码生成器,我正在阅读pg_catalog.pg_enum
表格,按 OID 对枚举文字进行排序,这是在 PostgreSQL 9.0 中指定的方式。使用更新的规范,似乎我应该按 排序文字enumsortorder
,这似乎表现不同,因为它尊重“中间”的枚举文字插入。
从pg_catalog
?