ADR-0014: Default to PostgreSQL for new stateful services
Status
Accepted
Outcome
One obvious default relational store for greenfield work, reducing split runbooks and onboarding confusion.
Decision
Adopt PostgreSQL 15+ as the default for new stateful services after 2026-05-01. Teams may opt out with a short ADR naming the alternative and a concrete constraint.
Primary tradeoff
We accept dual-engine operations during a long tail until MySQL services migrate or retire under their own ADRs.
Why
- PostgreSQL is already in production for billing and analytics
- SRE can converge backup and HA playbooks on fewer engines
- New hires see one obvious default in templates and sample repos
Decision boundaries
Impacted:
- Provisioning templates and CI scaffolds
- Default connection strings in sample repos
- SRE backup and HA playbook scope
Not impacted:
- Existing MySQL services (no forced migration)
- Vendor-certified workloads locked to MySQL
- Non-relational stores (Redis, S3, etc.)
Assumptions:
- Internal cloud supports PostgreSQL 15+ with managed HA
- Opt-out path remains first-class, not a hack
Guardrails:
- Opt-out requires a documented ADR with named constraint
- SRE reviews new provisioning within 48 h
- Extension matrix published before first production deploy