#1154·kaminari

`PG::NumericValueOutOfRange` when `.page(num)` is called with a very large page number

Author: jrdufresneCreated Sep 1, 2026Updated Sep 1, 2026

Description

.page(num) computes the offset with no upper bound:

ruby
# kaminari-activerecord/lib/kaminari/activerecord/active_record_model_extension.rb
def self.page(num = nil)
  per_page = max_per_page && (default_per_page > max_per_page) ? max_per_page : default_per_page
  limit(per_page).offset(per_page * ((num = num.to_i - 1) < 0 ? 0 : num)).extending do
    ...
  end
end

If num is large enough it will overflows PostgreSQL's bigint range (max 9223372036854775807). This is typically driven from a user input as a query parameter (e.g. ?page=). This will surface as an unhandled 500.

Steps to reproduce

ruby
# any AR model
User.page(99999999999999999999).per(25).to_a
# => PG::NumericValueOutOfRange: ERROR:  value "..." is out of range for type bigint