【发布时间】:2019-03-24 00:26:12
【问题描述】:
我有一个名为流的表,它有几行,我喜欢根据 created_on 列更改数据库中物理行的顺序。我总共有 179 行, row (id) 179 应该有最新的 created_on 日期,然后 row (id) 178 应该有第二个最新的 created_on 日期。正如您从下面的小 sn-p 中看到的那样,事情不是按顺序排列的,例如 id 172 上的日期比 id 179 上的日期新。我可以通过这样做得到正确的数据
select * from streams order by created_on desc
但是他们希望它通过 id 进行搜索,例如这样
select * from streams order by id desc
上面的查询产生了下面的结果。我们的一切工作正常,但我们从 Postgres 10 迁移到 Postgres 11 并搞砸了事情的顺序。
【问题讨论】:
-
您的观众希望先看到最高 ID 还是先看到最新创建的 ID?
-
最高 ID 也将有最新创建的 ID 优先。但是问题是我们迁移了这 179 条记录,并且它们以随机顺序插入。我现在正试图通过根据最新创建的日期更新这 179 条记录的 ID 来纠正这个问题。我似乎无法找到一种方法来做到这一点。
-
没有“行的顺序”这样的东西。关系数据库中的行没有任何“顺序”。 only(实际上:only)保证订单的方式是在您select 行时使用
order by。如果您以某种方式更改物理顺序,则无法保证查询将按该顺序返回它们。保证订单的唯一方法是使用order by,别无选择。