PostgreSQL mudando voltou linhas encomendar

votos
5

Eu tenho uma tabela chamada categorias, que contém ID (longo), Nome (varchar (50)), parentID (longo), e shownByDefault colunas (booleano).

Esta tabela contém 554 registros. Todos os shownByDefaultValues são 'falso'.
Quando eu executar 'SELECT id, nome de categorias', pg me retorna todas as categorias, ordenador pelo seu id.
Então eu atualizar algumas das linhas da tabela ( 'categorias de atualização definir shownByDefault onde parentId = 1'), atualização OK.
Então, quando tento executar a primeira consulta, que retorna todas as categorias, são returner com uma ordem muito estranho.
Eu não tenho problema para adicionar 'order by', mas desde que eu estou usando JPA para obter estes valores, ninguém sabe qual é o problema ou se há uma maneira de corrigir isso?

Publicado 15/12/2008 em 20:00
fonte usuário
Em outras línguas...                            


3 respostas

votos
16

Isso não é um problema. A ordem de linhas retornadas por um SELECT SQL é indefinido, a menos que tenha um ORDER BY. A fim de obtê-los é geralmente influenciada pela ordem em que são armazenados na tabela e / ou os índices que são usados pela instrução.

Então, dependendo de que a ordem sem o uso ORDER BYé muito, muito má ideia.

Se você precisar deles, de alguma forma, basta especificar isso.

É importante que uma mesa é um conjunto de linhas e não uma seqüência de linhas.

Respondeu 15/12/2008 em 20:03
fonte usuário

votos
9

A partir dos documentos :

Se a cláusula ORDER BY é especificada, as linhas retornadas são classificadas na ordem especificada. Se ORDER BY não é dado, as linhas são retornadas na ordem em que o sistema encontra mais rápida de produzir.

Respondeu 15/12/2008 em 20:05
fonte usuário

votos
2

As linhas são retornadas em qualquer que seja sua ordem física no disco é; você pode reordená-los fisicamente usando o CLUSTERcomando SQL, mas devido à forma como Postgres funciona eles vão se tornar desordenado assim que você começar a modificar linhas.

Para o que você está fazendo um ORDER BYé a resposta certa.

Respondeu 15/12/2008 em 20:18
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more