POSTGRES: Como pegar de 10 em 10 linhas ?
Tenho uma lista de eventos que quero exibir no front-end. Não quero puxar todos os eventos, porque podem ser muitos. Quero puxar de 10 em 10, conforme o usuário for passando a página ou rolando. Pra isso, creio que preciso de uma query que pega de X em X (tipo, 10 em 10) linhas da tabela, correto?
Como faço isso?
Estou tentando o seguinte:
select with CTE AS (select row_number() over (order by id) rnum from events) select * from CTE where rnum > 0 AND rnum < 11;
O problema é que não consigo obter todas as colunas, obtenho sempre somente a própria coluna rnum (row_number)
O problema está na seguinte string, eu acho:
select row_number() over (order by id) rnum from events
Isto porque o RNUM ou qualquer outro valor, sempre vai retornar somente a posição da linha, e nunca retorna todas as colunas... Como posso resolver?
Fala cara, beleza?
Uma forma simples de atingir o objetivo que você quer é usando LIMIT aliado ao OFFSET.
O LIMIT
determina a quantidade de resultados que você deseja, e o OFFSET
determina a quantidade de registros que você quer “pular”. Por exemplo, no seu caso você pode usar um LIMIT de 10. Na primeira página, o OFFSET seria 0, na segunda 10, na terceira 20, e assim por diante.
SELECT *
FROM cte
ORDER BY id
LIMIT 10 OFFSET 0
Espero que tenha ajudado!
Referência: https://www.geeksforgeeks.org/postgresql-limit-with-offset-clause/