1

我有一个名为流的表,它有几行,我喜欢根据 created_on 列更改数据库中物理行的顺序。我总共有 179 行, row (id) 179 应该有最新的 created_on 日期,然后 row (id) 178 应该有第二个最新的 created_on 日期。正如您从下面的小片段中看到的那样,事情不是按顺序排列的,例如 id 172 上的日期比 id 179 上的日期新。我可以通过这样做得到正确的数据

 select * from streams order by created_on desc

但是他们希望它通过这样的 id 搜索

select * from streams order by id desc

上面的以下查询产生了以下结果。我们的一切工作正常,但我们从 Postgres 10 迁移到 Postgres 11 并搞砸了事情的顺序。

在此处输入图像描述

4

1 回答 1

2

您可以使用如下所示重新生成id列值UPDATE

UPDATE streams SET id = tmp.row_id
FROM  (SELECT id, row_number() OVER (ORDER BY created_on, id) AS row_id FROM streams) AS tmp
WHERE streams.id = tmp.id;

之后,您可能希望使用以下命令对磁盘上的行进行物理重新排序CLUSTER

CLUSTER streams USING <index-for-id-column>;
于 2019-03-24T10:38:38.117 回答