如何更改Postgres 10.2中某些列的默认排序?

Dav*_*vuz 3 sql postgresql sql-order-by

我从Postgres得到了博客文章列表

select id, post_priority, publish_start
from posts
where email = 'someuser@gmail.com'
ORDER BY publish_start DESC
Run Code Online (Sandbox Code Playgroud)

如果有许多文章发表同一日期,则该列表有误。

当我从Postgres 10.2(服务器Ubuntu)中检索到时

  id  | title |    post_priority     | publish_start
------+-------+----------------------+----------------
 1001 | A...  | 1                    | 2019-09-05
 1002 | B...  | 2                    | 2019-09-05
Run Code Online (Sandbox Code Playgroud)

从开发机器中检索出来的情况与众不同-Postgres 11(MacOS)

  id  | title |    post_priority     | publish_start
------+-------+----------------------+----------------
 1002 | B...  | 2                    | 2019-09-05
 1001 | A...  | 1                    | 2019-09-05
Run Code Online (Sandbox Code Playgroud)

我知道我只需要在查询中再添加一列即可。但是我仍然想知道,当所有文章的publish_start日期都相同时,是什么决定了默认排序?如何更改/配置该默认列?

a_h*_*ame 6

没有默认排序顺序之类的东西。

如果两行(或更多行)的order by玫瑰列顺序中指定的列的值相同,则未定义。

获得稳定和有保证的排序顺序的唯一方法是将其添加post_priorityorder by列中。

  • @Davuz:因为数据库可以自由以其想要的任何顺序返回行。这可能会受到执行计划,磁盘上行的物理布局,并发查询,默认排序规则,更新/删除/插入操作的数量以及许多其他因素的影响。 (2认同)