Executando verificação de segurança...
1

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?

3

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/

2