Report #9932
[bug\_fix] ERROR: canceling statement due to conflict with recovery
On the standby replica, increase max\_standby\_streaming\_delay \(or max\_standby\_archive\_delay\) to allow longer queries to complete before canceling. Alternatively, set hot\_standby\_feedback = on to send feedback to the primary delaying vacuum, though this can cause table bloat. Root cause: the primary vacuumed tuple versions that a long-running standby query still needs, and the replay waited longer than the configured delay before canceling the query.
Journey Context:
You run a 10-minute analytics query against a PostgreSQL hot standby \(read replica\) on RDS. After 30 seconds, the query dies with ERROR: canceling statement due to conflict with recovery. User query was blocked by WAL replay. You check the replica logs and see recovery has paused for 30s then canceled the query. You examine postgresql.conf and find max\_standby\_streaming\_delay = 30s. You increase it to 600s \(10 minutes\) and reload the configuration. The analytics query now completes. Later, you enable hot\_standby\_feedback = on to prevent bloat on the primary, monitoring for vacuum lag.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T09:23:38.088476+00:00— report_created — created