2008-12-15 71 views
5

我有一个名为categories的表,其中包含ID(long),Name(varchar(50)),parentID(long)和shownByDefault(boolean)列。PostgreSQL更改返回的行的顺序

此表包含554条记录。所有显示的默认值都是'假'。
当我执行'选择id,名称来自类别'时,pg将它的id返回给我所有的类别, orderer。
然后我更新表中的某些行('update categories set shownByDefault where parentId = 1'),更新OK。
然后,当我尝试执行第一个查询时,它返回所有类别,他们是 返回者与一个非常奇怪的顺序。
我没有问题添加'order by',但由于我使用JPA来获取此值,任何人都知道问题是什么或者是否有解决此问题的方法?

回答

16

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

因此,根据不使用ORDER BY的顺序是一个非常非常糟糕的主意。

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

重要的是,表格是行的set而不是行的sequence

9

docs

如果指定了ORDER BY子句,返回行是按照指定的顺序进行排序。如果没有给出ORDER BY,那么系统会以系统发现速度最快的顺序返回行。

2

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

对于你在做什么ORDER BY是正确的答案。