SQLSTATE 22003 ERROR Class 22: Data Exception

numeric_value_out_of_range value “…” is out of range for type bigint — 22003

PostgreSQL error “value … is out of range for type bigint — 22003” (SQLSTATE 22003): what it means, common causes, and how to fix it.

PG 9.6, 10, 11, 12, 13, 14, 15, 16, 17, 18 Official docs
Last reviewed Jun 2026 Grounded in source

Diagnostic Queries

Symptoms

A textual value was too large (or small) to fit a bigint during conversion. PostgreSQL raises SQLSTATE 22003 (numeric_value_out_of_range).

  • The value exceeds the 64-bit bigint range.
  • Common parsing huge numeric strings.
  • bigint spans roughly ±9.2×10^18.

What the server log shows

ERROR:  value "9999999999999999999999" is out of range for type bigint

Why PostgreSQL raises this — what the manual says

Section 8.1.1 Integer Types:

“Attempts to store values outside of the allowed range will result in an error.”

bigint is a signed 64-bit integer. Converting a value beyond its range cannot be represented, so PostgreSQL reports 22003.

Common causes

  • Parsing a numeric string larger than 64 bits.
  • Arithmetic/aggregation overflowing bigint.
  • Choosing bigint where numeric is needed for huge values.

How to fix it

  1. Use numeric for arbitrarily large integers.
  2. Validate inputs against the bigint range before conversion.
  3. Cast intermediate results to numeric to avoid overflow.

Related & next steps

Reference: PostgreSQL 18 Section 8.1 “Numeric Types”.

Was this helpful?