Troubleshooting
Match your symptom to the fix.
Find your symptom, apply the fix, follow the link for the full story.
The run fails before any check
- Symptom:
UNKNOWN / exit 3on connect. Fix: check DSN resolution order, then confirm the server reports version 13–17 (SELECT current_setting('server_version_num')must be 130000–179999). Runpgdba config doctorto see exactly which profile fails and why. → connection profiles - Symptom: typo’d profile or config key.
Fix: exit-3 messages include a
did you mean:suggestion — trust it. The same machinery powers--explain-flag/--explain-termlookups. - Symptom: migration refused at preflight.
Fix: read the remediation text after each mismatch
(locale/encoding/extension/disk); use
--forceonly to proceed past health/scope gates with warnings recorded. → the migrate safe lane
The run succeeds but the output surprises you
- Symptom: slow queries show
heuristic-unverifiedor a pg_stat_activity fallback. Fix: installpg_stat_statements(allowlisted) on the target. The check degrades gracefully until then, and every finding states its evidence quality. - Symptom: no writes with
--apply. Fix: expected on RDS/replicas (refused per finding, see the audit log) or when remediation is multi-statement (stays dry-run for manual review). A non-TTY--applywithout--yesis refused (exit 1) but the run still writes its report — exit 1 is the refusal signal; the report always describes the run that just happened. → apply remediation - Symptom: second
servestart exits 3 naming a pid. Fix: another instance holds the state dir — stop it first. A stale pidfile (dead pid) is replaced automatically with a warning. → run as a service - Symptom:
fleet checkreports a target BROKEN. Fix: the per-target error is redacted but names the cause (usually connect refused / bad profile). Fix that target’s connection, re-run — other targets are unaffected. → run a fleet