我需要设置 worldship 从我们的一个 postgres 数据库中提取。我需要它,以便包按 id 排序。我没有办法(我知道)让 worldship 发送 order by 子句,所以我需要默认返回的记录由 id 返回。
在第二个注意事项上,我不知道 postgres 默认如何排序它在上次更改记录时看起来像这样,所以如果我写了两个记录 id 1,2 然后在我运行查询时更改记录 2,它会返回记录 2第一。
我需要设置 worldship 从我们的一个 postgres 数据库中提取。我需要它,以便包按 id 排序。我没有办法(我知道)让 worldship 发送 order by 子句,所以我需要默认返回的记录由 id 返回。
在第二个注意事项上,我不知道 postgres 默认如何排序它在上次更改记录时看起来像这样,所以如果我写了两个记录 id 1,2 然后在我运行查询时更改记录 2,它会返回记录 2第一。
根据 sql 规范,行以未指定的顺序返回,除非您添加 order by 子句。在 Postgres 中,这意味着您将获得行,基本上,活动行在磁盘上读取的顺序。
如果您想要一致的顺序而不需要添加 order by 子句,请按照 Jack 的评论中的建议创建一个视图。
没有“默认排序”之类的东西。表中的行未排序。
您可以使用视图来伪造这一点(如 Jack Maney 所建议),您无法影响返回的行的顺序。
但如果您这样做,请注意,在基于该视图的 SELECT 中添加额外的 ORDER BY 将对数据进行两次排序。
另一种选择可能是在该表上运行 CLUSTER 命令,以根据您想要的列对磁盘上的行进行物理排序。但是这个 sill不能保证 这些行按那个顺序返回。即使是平原也没有SELECT * FROM your_table
(但机会相当高)。您需要定期重新运行此语句,因为 CLUSTER 命令创建的顺序不会自动维护。
就其价值而言,这可能并不多,PostgreSQL 的“默认”排序是基于上次更新记录的时间。最近更新的记录将最后出现。
您最终可以使用排序索引,它应该保证您检索行的顺序,以防查询计划命中索引,或者如果您强制它,但这种方法将不仅仅是迂回:)。ORDER BY
如前所述,子句是要走的路。