Вместо OFFSET используется курсор - значение ключа последней полученной строки. Следующая страница: WHERE (created_at, id) < (:last_created, :last_id) ORDER BY created_at DESC, id DESC LIMIT 20. Стабильная производительность при большом количестве страниц, нет "прыжков" при появлении новых данных. Нельзя перейти на произвольную страницу по номеру - только вперед/назад по курсору.