PostgreSQL更改返回的行顺序

时间:2008-12-15 19:00:56

标签: postgresql

我有一个名为categories的表,其中包含ID(long),Name(varchar(50)),parentID(long)和shownByDefault(boolean)列。

此表包含554条记录。所有显示的ByDefaultValues都是'false' 当我执行'select id,name from categories'时,pg会返回所有类别, orderer by id 然后我更新了表的一些行('更新类别设置显示,其中parentId = 1',其中,更新确定。) 然后,当我尝试执行第一个返回所有类别的查询时,它们就是 返回者有一个非常奇怪的命令。
添加'order by'我没有问题,但由于我使用JPA来获取此值,所以任何人都知道问题是什么或者是否有办法解决这个问题?

3 个答案:

答案 0 :(得分:18)

这不是问题。除非SQL ORDER BY具有ORDER BY,否则SQL SELECT返回的行的顺序是未定义的。您获得它们的顺序通常受它们存储在表中的顺序和/或语句使用的索引的影响。

因此,在不使用{{1}}的情况下依赖该顺序是一个非常非常糟糕的主意。

如果您需要某种顺序,只需指定。

表格是行set而不是sequence行非常重要。

答案 1 :(得分:10)

来自docs

  

如果指定了ORDER BY子句,则返回的行按指定的顺序排序。如果未给出ORDER BY,则按系统发现最快生成的顺序返回行。

答案 2 :(得分:3)

无论磁盘上的物理顺序如何,都会返回行;您可以使用CLUSTER SQL命令对它们进行物理重新排序,但由于Postgres的工作方式,一旦开始修改行,它们就会变得无序。

对于你正在做的事情,ORDER BY是正确答案。