【问题标题】:Why order of results varies when querying table pg_enum in Postgres?为什么在 Postgres 中查询表 pg_enum 时结果的顺序会有所不同?
【发布时间】:2019-12-18 20:19:12
【问题描述】:

昨天查询了PostgreSQL的pg_enum表:

SELECT enumlabel FROM pg_enum

enumlabels 按enumsortorder 的顺序返回。

今天我运行相同的查询,但 enumlabels 以enumlabel字母顺序返回。

什么会导致这种情况发生?

【问题讨论】:

  • 自您的第一次查询以来,您或其他人是否添加/删除/修改了枚举值?还是 DB-admins 安装了更新?也许related question 有帮助。

标签: sql postgresql enums sql-order-by


【解决方案1】:

数据库表表示无序行集。除非您确实指定了 order by 子句,否则无法保证返回行的顺序,并且结果的顺序可能在同一查询的后续执行中不一致。

所以,在您的查询中添加一个order by 子句:

select enumlabel from pg_enum order by enumlabel

【讨论】:

  • 我的印象是,在 postgres 中,pg_enum 标签总是以枚举排序顺序返回。不是这样吗
  • 显然是个误会。排序顺序用于确定比较时的相对位置。 ( 等)。我猜@GMB 不够强调:除非 order by 指定的顺序永远不会得到保证。
  • 谢谢。只是想知道为什么在以同样的方式表现几个月后它会改变。
  • @MargaretKearney:实际上我可以随时更改,因为不能保证。只是不要依赖假设的默认排序;相反,习惯于在您想要订购时使用order by
【解决方案2】:

除了 GMB 的回答之外,还试图解释这种粗暴的行为。我能想到一些原因:

  • 您不知道,数据库是从(逻辑)​​备份中恢复的。

  • 有人在桌子上跑了VACUUM (FULL)CLUSTER

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 2013-11-18
    • 2010-09-25
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多