PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Qual é a ordem padrão de uma lista retornada de uma chamada de filtro Django?


Não há NENHUM PEDIDO PADRÃO , um ponto que não pode ser enfatizado o suficiente porque todo mundo faz errado.

Uma tabela em um banco de dados não é uma tabela html comum, é um conjunto não ordenado de tuplas. Muitas vezes surpreende os programadores acostumados apenas ao MySQL porque nesse banco de dados em particular a ordem das linhas geralmente é previsível devido ao fato de não aproveitar algumas técnicas avançadas de otimização. Por exemplo, não é possível saber quais linhas serão retornadas ou sua ordem em qualquer uma das seguintes consultas:
select * from table limit 10
select * from table limit 10 offset 10
select * from table order by x limit 10

Na última consulta, a ordem só é previsível se todos os valores da coluna x forem exclusivos. O RDBMS é livre para retornar quaisquer linhas na ordem que desejar, desde que satisfaça as condições da instrução select.

Embora você possa adicionar uma ordenação padrão no nível do Django, o que faz com que ele adicione uma cláusula order by a cada consulta não ordenada:
class Table(models.Model):
    ...
    class Meta:
        ordering = ['name']

Observe que pode ser um empecilho de desempenho, se por algum motivo você não precisar de linhas ordenadas.