Limit e Offset

O PostgreSQL é muito amigo quando se trata de fazer paginação de dados pois os recursos LIMIT e OFFSET permitem selecionar conjunto de dados para montarmos nossa paginação.

O LIMIT (limite) permite que seja retornado somente a quantidade de registros especificado pelo parâmertro. O restante das linhas serão ignoradas e dependendo da quantidade real de registros, o retorno será muito mais rápido.

O OFFSET (deslocamento) diz para saltar a quantidade de linhas antes de começar a mostrar as linhas do parâmetro LIMIT.

LIMIT (limite) e OFFSET (deslocamento) permitem que seja trazida apenas uma parte das linhas geradas pelo restante da consulta:

SELECT lista_de_seleção
    FROM expressão_de_tabela
    [LIMIT { número | ALL }] [OFFSET número]
SELECT id, nome FROM public.cliente WHERE estado = 'MS' ORDER BY nome LIMIT 50 ;

A instrução acima lista apenas os 50 primeiros registros da SELECT.
 

SELECT id, nome FROM public.cliente WHERE estado = 'MS' ORDER BY nome LIMIT 50 OFFSET 0;

A instrução acima lista apenas os 50 primeiros registros da SELECT iniciando do registro 0 que é o primeiro registro. Neste caso, não há diferença para a consulta anterior.
 

SELECT id, nome FROM public.cliente WHERE estado = 'MS' ORDER BY nome LIMIT 50 OFFSET 50;

A instrução acima lista 50 registros, iniciando do registro 50. Se desenvolvêssemos uma consulta com páginas de 50 registros, esta consulta retornaria a segunda página. Para as próximas páginas, bastaríamos alterar o valor do OFFSET em múltiplos de 50.

OFFSET diz para saltar esta quantidade de linhas antes de começar a retornar as linhas. OFFSET 0 é o mesmo que omitir a cláusula OFFSET. Se forem especificados tanto OFFSET quanto LIMIT, então são saltadas OFFSET linhas antes de começar a contar as LIMIT linhas que serão retornadas.

Quando se utiliza LIMIT é importante utilizar a cláusula ORDER BY para estabelecer uma ordem única para as linhas do resultado. Caso contrário, será retornado um subconjunto imprevisível de linhas da consulta; pode-se desejar obter da décima a vigésima linha, mas da décima a vigésima de qual ordem? A ordem é desconhecida a não ser que seja especificado ORDER BY.

deck

By walternascimento

deck

  • 281