PostgreSQL изменяет порядок возвращаемых строк - PullRequest
6 голосов
/ 15 декабря 2008

У меня есть таблица с именами категорий, которая содержит столбцы ID (long), Name (varchar (50)), parentID (long) и selectedByDefault (логическое значение).

Эта таблица содержит 554 записи. Все показанные значенияByDefaultValues ​​равны 'false'.
Когда я выполняю «выбрать идентификатор, имя из категории», pg возвращает мне все категории, заказчик по его идентификатору.
Затем я обновляю некоторые строки таблицы («обновить набор категорий, показанный ByDefault, где parentId = 1»), обновляю «ОК».
Затем, когда я пытаюсь выполнить первый запрос, который возвращает все категории, они возвращающийся с очень странным заказом.
У меня нет проблем с добавлением 'order by', но, поскольку я использую JPA для получения этих значений, кто-нибудь знает, в чем проблема или есть способ ее исправить?

Ответы [ 3 ]

18 голосов
/ 15 декабря 2008

Это не проблема. Порядок строк, возвращаемых SQL SELECT, не определен, если он не имеет ORDER BY. Порядок их получения обычно зависит от порядка, в котором они хранятся в таблице, и / или индексов, используемых оператором.

Так что в зависимости от этого порядка без использования ORDER BY это очень и очень плохая идея.

Если они вам нужны в каком-то порядке, просто укажите это.

Важно, чтобы таблица представляла собой набор строк, а не последовательность строк.

10 голосов
/ 15 декабря 2008

Из документов :

Если указано предложение ORDER BY, возвращаемые строки сортируются в указанном порядке. Если ORDER BY не указан, строки возвращаются в любом порядке, который система сочтет наиболее быстрым.

3 голосов
/ 15 декабря 2008

Строки возвращаются в любом физическом порядке на диске; вы можете переупорядочить их физически, используя команду SQL CLUSTER, но из-за того, как Postgres работает, они станут неупорядоченными, как только вы начнете изменять строки.

Для того, что вы делаете, правильный ответ - ORDER BY.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...