Postgres默认排序由id - worldship

时间:2011-07-05 16:01:12

标签: postgresql ups-worldship

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

在第二个注释中我不知道postgres默认排序它是什么样的,它最后一次更改记录,所以如果我写了两个记录id 1,2然后在运行查询时更改记录2它返回它们记录2是第一个。

4 个答案:

答案 0 :(得分:28)

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

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

答案 1 :(得分:7)

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

您可以使用视图伪造此内容(正如Jack Maney所建议的那样)您无法影响返回的行的顺序。

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

另一个选项可能是在该表上运行CLUSTER命令,根据所需的列对磁盘上的行进行物理排序。但是这个窗台不保证按行顺序返回行。甚至没有普通SELECT * FROM your_table(但可能性相当高)。 您需要定期重新运行此语句,因为CLUSTER命令创建的顺序不会自动维护。

答案 2 :(得分:1)

对于它的价值(可能不多),PostgreSQL的“默认”顺序基于上次更新记录的时间。最新更新的记录将显示在最后。

答案 3 :(得分:0)

你最终可以使用一个排序索引,它应该保证你检索到的行的顺序,以防查询计划到达索引,或者如果你强制它,但这种方法将不仅仅是迂回:)。 ORDER BY条款是已经提到的方式。