Cookbook recipe

Stop transaction ID wraparound before it stops you

Applies to PostgreSQL 13–17 Last reviewed May 2026 Grounded in source
Estimated investigation4 min

Scenario

You see warnings about transaction ID wraparound or "database is not accepting commands". This is an emergency — act before the database shuts down to protect itself. Diagnose it Find the databases/tables closest to wraparound: SELECT…

Investigation Path

You see warnings about transaction ID wraparound or “database is not accepting commands”. This is an emergency — act before the database shuts down to protect itself.

Diagnose it

Find the databases/tables closest to wraparound:

SELECT datname, age(datfrozenxid) AS xid_age
FROM pg_database ORDER BY xid_age DESC;

SELECT relname, age(relfrozenxid) AS xid_age
FROM pg_class WHERE relkind='r'
ORDER BY xid_age DESC LIMIT 20;

Why it happens

XIDs are 32-bit and wrap around. VACUUM “freezes” old rows so their XIDs can be reused. If vacuum falls behind autovacuum_freeze_max_age, age climbs toward 2 billion and PostgreSQL stops accepting writes to prevent data loss.

This is a Pro lesson

Get every Learning Pathway and cookbook recipe — grounded in PostgreSQL source code, with diagnostics, fixes, and prevention for each topic.

Continue this lesson to learn:

  • How to fix it
  • Prevent it next time
  • Related & next steps
  • All 36 Learning Pathway lessons
  • 170+ cookbook recipes
  • Source-grounded diagnostics & fixes

Secure checkout Cancel anytime Source-grounded

Career Impact

This scenario builds production judgment and operational confidence under pressure.

Open Career Dashboard →

Keep going

Related & next steps

Was this helpful?

← All cookbook recipes