Посмотрите на OFFSET и LIMIT в PostgreSQL.
Ваш запрос для 5-й страницы может выглядеть так:
SELECT *
FROM tbl
ORDER BY id
OFFSET 400
LIMIT 100;
id
- это первичный ключ в моем примере, поэтому индекс создается автоматически.
Если вы часто получаете доступ к таблице, производительность может выиграть от использования CLUSTER .
Общее количество страниц:
SELECT ceil(1235::real / 100)::int
FROM tbl;
Если вы хотите, чтобы число было округлено в меньшую сторону, просто упростите до:
SELECT 1235 / 100
FROM tbl;
Если оба числа являются целыми, результат будет целочисленным, а дробные цифры усекаются автоматически. Но я думаю, тебе нужно сойти сюда.