Pular para o conteúdo principal
Documentos
Sintaxe básicaFunções JSONAcionadoresGerenciamento de tabelas e esquemasFunções de cadeia de caracteresFunções matemáticasFunções de dataBancos de dadosÍndices

PostgreSQL OFFSET

A cláusula `OFFSET` no PostgreSQL é utilizada para pular um número específico de linhas antes de começar a retornar as linhas de uma consulta. Isso é particularmente útil para implementar a paginação em conjuntos de resultados.

Uso

A cláusula `OFFSET` é normalmente usada em conjunto com `LIMIT` para paginar os resultados da consulta, ignorando um número específico de linhas. Ela é colocada após a cláusula `ORDER BY` para garantir que as linhas sejam ignoradas em uma ordem previsível.


SELECT column1, column2, ...
FROM table_name
[ORDER BY column]
OFFSET number_of_rows;

Nessa sintaxe, `OFFSET number_of_rows` especifica quantas linhas devem ser omitidas do início do conjunto de resultados.

Exemplos

1. Deslocamento básico


SELECT *
FROM employees
OFFSET 10;

Essa consulta ignora as primeiras 10 linhas da tabela `employees`, retornando todas as linhas subsequentes.

2. Deslocamento com limite


SELECT *
FROM products
ORDER BY product_id
OFFSET 5
LIMIT 10;

A consulta ignora as primeiras 5 linhas e retorna as próximas 10 linhas, fornecendo um conjunto de resultados paginados ordenados por `product_id`.

3. Offset com consulta complexa


SELECT customer_id, order_date
FROM orders
WHERE order_status = 'completed'
ORDER BY order_date DESC
OFFSET 20
LIMIT 5;

Esse exemplo retorna 5 linhas depois de ignorar as primeiras 20 linhas de pedidos concluídos, classificadas por `order_date` em ordem decrescente.

Dicas e práticas recomendadas

  • Combine com `LIMIT`. Use `OFFSET` com `LIMIT` para uma paginação eficaz e para evitar a recuperação desnecessária de dados.
  • Garanta a consistência dos pedidos. Sempre combine `OFFSET` com `ORDER BY` para garantir resultados consistentes e previsíveis.
  • Considerações sobre o desempenho. Tenha cuidado com offsets grandes, pois eles podem afetar o desempenho, já que todas as linhas até o ponto de deslocamento ainda são processadas. Considere técnicas alternativas de paginação, se necessário.
  • Indexação baseada em zero. Lembre-se de que `OFFSET` é baseado em zero, portanto `OFFSET 0` retornará todas as linhas sem pular nenhuma.
  • Métodos alternativos de paginação. No caso de conjuntos de dados grandes, considere o uso de métodos alternativos, como cursores ou paginação de conjunto de chaves, que podem ser mais eficientes, pois evitam o processamento de grandes deslocamentos.