24

我需要设置 worldship 从我们的一个 postgres 数据库中提取。我需要它,以便包按 id 排序。我没有办法(我知道)让 worldship 发送 order by 子句,所以我需要默认返回的记录由 id 返回。

在第二个注意事项上,我不知道 postgres 默认如何排序它在上次更改记录时看起来像这样,所以如果我写了两个记录 id 1,2 然后在我运行查询时更改记录 2,它会返回记录 2第一。

4

4 回答 4

45

根据 sql 规范,行以未指定的顺序返回,除非您添加 order by 子句。在 Postgres 中,这意味着您将获得行,基本上,活动行在磁盘上读取的顺序。

如果您想要一致的顺序而不需要添加 order by 子句,请按照 Jack 的评论中的建议创建一个视图。

于 2011-07-05T16:43:32.083 回答
10

没有“默认排序”之类的东西。表中的行未排序。

您可以使用视图来伪造这一点(如 Jack Maney 所建议),您无法影响返回的行的顺序。

但如果您这样做,请注意,在基于该视图的 SELECT 中添加额外的 ORDER BY 将对数据进行两次排序。

另一种选择可能是在该表上运行 CLUSTER 命令,以根据您想要的列对磁盘上的行进行物理排序。但是这个 sill不能保证 这些行按那个顺序返回。即使是平原也没有SELECT * FROM your_table(但机会相当高)。您需要定期重新运行此语句,因为 CLUSTER 命令创建的顺序不会自动维护。

于 2011-07-05T16:44:54.067 回答
8

就其价值而言,这可能并不多,PostgreSQL 的“默认”排序是基于上次更新记录的时间。最近更新的记录将最后出现。

于 2020-04-30T12:34:18.797 回答
-1

您最终可以使用排序索引,它应该保证您检索行的顺序,以防查询计划命中索引,或者如果您强制它,但这种方法将不仅仅是迂回:)。ORDER BY如前所述,子句是要走的路。

于 2013-04-29T14:52:08.467 回答