Report #8009
[bug\_fix] integer out of range / nextval: reached maximum value of sequence
Alter the column and sequence to use 64-bit integers. Execute: ALTER TABLE table\_name ALTER COLUMN id TYPE bigint; followed by ALTER SEQUENCE table\_name\_id\_seq AS bigint; \(PostgreSQL 10\+\). For PostgreSQL <10, drop and recreate the sequence with AS bigint, ensuring the current value is preserved. This prevents overflow for high-insert workloads.
Journey Context:
Service began throwing insert errors: 'integer out of range'. Investigated the table and found max\(id\) was 2147483647 \(2^31-1\). The table was created with id SERIAL, which maps to 4-byte integer. The sequence had exhausted its positive range. The rabbit hole: considered a dangerous sequence reset \(would cause PK collisions\), and archiving old data \(complex and slow\). The proper architectural fix required expanding the column to 8-byte bigint. Executed ALTER TABLE events ALTER COLUMN id TYPE bigint; followed by ALTER SEQUENCE events\_id\_seq AS bigint; \(the AS syntax is valid in PG 10\+\). This allowed the sequence to continue incrementing beyond 2.1 billion. Why the fix works: bigint uses 8 bytes \(max 9.2 quintillion\), providing effectively unlimited range for the sequence, while ALTER TABLE ... TYPE rewrites the table \(lock held, but brief for empty tail\) and updates the sequence metadata to generate 8-byte values.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T04:18:33.888019+00:00— report_created — created