Snapshot Too Old — SQLSTATE 72000

SQLSTATE 72000 condition snapshot_too_old class 72 — Snapshot Too Old severity ERROR
Reproduced & verified on PostgreSQL 14.23, 15.18, 16.14, 17.10 and 18.4 — identical message on every version.
Last reviewed 10 Jun 2026 · Reproduced live with the SQL on this page.

Symptoms

A long-running query tried to read data that had already been removed by vacuum under the (now-removed) old_snapshot_threshold feature.

What the server log shows

ERROR:  snapshot too old

Why PostgreSQL raises this — what the manual says

As Appendix A PostgreSQL Error Codes explains:

SQLSTATE 72000 (snapshot_too_old) is a legacy code: the old_snapshot_threshold feature that produced it was removed in PostgreSQL 14, so it no longer appears in the error-code list and is not raised by current servers.

72000 was raised by the old_snapshot_threshold mechanism: a snapshot older than the threshold reading a page whose old row versions had been vacuumed away got this error instead of silently wrong results. old_snapshot_threshold was removed in PostgreSQL 17, so on PG17+ this code is effectively never raised.

Common causes

How to fix it

  1. On PG17+ the feature is gone — this error no longer occurs.
  2. On older versions, keep transactions short or raise/disable old_snapshot_threshold.
  3. Avoid leaving idle-in-transaction sessions open.

Related & next steps

Reference: PostgreSQL 18 Appendix A — Class 72 (Snapshot Failure).