2008-12-15 10 views
5

Tengo una tabla llamada categorías, que contiene ID (largo), Name (varchar (50)), parentID (long), y columnas shownBfault (boolean).PostgreSQL cambiando filas devueltas orden

Esta tabla contiene 554 registros. Todos los valoresByDefaultValues ​​son 'falso'.
Cuando ejecuto 'seleccionar id, nombre de categorías', pg me devuelve todas las categorías, orderer por su id.
Luego actualizo algunas de las filas de la tabla ('actualizar categorías establecidas showByDefault where parentId = 1'), actualice OK.
Luego, cuando intento ejecutar la primera consulta, que devuelve todas las categorías, son 0-retornador con un orden muy extraño.
No tengo problema para agregar 'ordenar por', pero dado que estoy usando JPA para obtener estos valores, ¿alguien sabe cuál es el problema o si hay alguna manera de solucionarlo?

Respuesta

16

Eso no es un problema. El orden de las filas devuelto por un SQL SELECT no está definido a menos que tenga un ORDER BY. El orden en que los obtiene suele estar influido por el orden en que están almacenados en la tabla y/o los índices que utiliza la declaración.

Por lo tanto, dependiendo de ese orden sin usar ORDER BY es una muy, muy mala idea.

Si los necesita en algún orden, simplemente especifique eso.

Es importante que una tabla es una set de filas y no un sequence de filas.

9

Desde el docs:

Si no se especifica la cláusula ORDER BY, los registros retornados se ordenan en el orden especificado. Si no se proporciona ORDER BY, las filas se devuelven en el orden que el sistema encuentre más rápido para producir.

2

Las filas se devuelven en cualquier orden física en el disco; puede reordenarlos físicamente usando el comando SQL CLUSTER, pero debido a la forma en que funciona Postgres, se desordenarán tan pronto como comience a modificar filas.

Por lo que estás haciendo, un ORDER BY es la respuesta correcta.

Cuestiones relacionadas