Skip to content

fix(cli): drop Postgres 13 and deprecate Postgres 14 for local databases - #7594

Merged
jgoux merged 4 commits into
developfrom
fix/drop-postgres-13-local
Nov 12, 2026
Merged

jgoux merged 4 commits into
developfrom
fix/drop-postgres-13-local

Conversation

@jgoux

@jgoux jgoux commented Nov 12, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Reject db.major_version = 13 at config validation with a dedicated message that points to the Postgres upgrade guide and names Postgres 17 as the target, alongside the existing 12.x message. Accepted values are now 14, 15 and 17.
  • Delete the Postgres 13.3 initial schema dump and the 13 branch in local database setup.
  • Drop the mapping that sent 13 to the Postgres 15 image.
  • supabase start and supabase db start print a stderr WARNING: when db.major_version = 14: Postgres 14 reached end of life on November 12, 2026, and the CLI will drop support for it soon. The warning names Postgres 17 as the upgrade target, links the upgrade guide, and prints before the already-running check, so it shows up on every start.

Context

The CLI ships no Postgres 13 image, so a v13 config already booted Postgres 15 with the 13.3 schema loaded on top. Stack mode already rejects anything other than 15 or 17. Postgres 14 support will be removed in a follow-up once the remaining projects have upgraded.

The CLI has no Postgres 13 image: db.major_version = 13 booted the
Postgres 15 image and loaded a 13.3 schema dump into it. Reject 13 at
config validation with a pointer to the upgrade guide, and delete the
13.3 schema dump and its image mapping.
@jgoux
jgoux requested a review from a team as a code owner November 12, 2026 09:51
@jgoux
jgoux requested a review from mdonnalley November 12, 2026 09:51
@jgoux jgoux self-assigned this Nov 12, 2026
@github-actions

Copy link
Copy Markdown
Contributor

CLI benchmark (Lightweight Commands): no changes found

Commit 19c6870 against develop at 0c8e9a0 · 10 runs each · report only, never blocks merging

Command Workload Before After Change
supabase --version version 207 ms 207 ms no real change
supabase --help help 207 ms 204 ms no real change
supabase init init 208 ms 208 ms no real change
supabase migration new bench migration-new 217 ms 228 ms no real change (+5%, within normal variation)
supabase config convert config-convert 235 ms 222 ms no real change (-6%, within normal variation)
supabase gen types --lang typescript --project-id replayfixtureprojref gen-types 241 ms 269 ms no real change (+12%, within normal variation)
supabase projects list projects-list 323 ms 336 ms no real change
supabase functions list --project-ref replayfixtureprojref functions-list 268 ms 260 ms no real change

API calls: unchanged for all 8 commands.

Binary size: 134.8 MB, down 192.0 KB from 135.0 MB.

Details: timing ranges, API calls per command, slowest phases

Timing ranges

Command Workload Before range After range Change Verdict
supabase --version version 180-219 ms 193-227 ms +0 ms (+0%) within noise
supabase --help help 193-224 ms 186-213 ms -3 ms (-2%) within noise
supabase init init 187-253 ms 195-231 ms 0 ms (0%) within noise
supabase migration new bench migration-new 202-258 ms 194-313 ms +11 ms (+5%) within noise
supabase config convert config-convert 209-285 ms 204-256 ms -13 ms (-6%) within noise
supabase gen types --lang typescript --project-id replayfixtureprojref gen-types 207-327 ms 236-305 ms +28 ms (+12%) within noise
supabase projects list projects-list 266-400 ms 269-398 ms +13 ms (+4%) within noise
supabase functions list --project-ref replayfixtureprojref functions-list 240-363 ms 245-435 ms -8 ms (-3%) within noise

API calls per command

Command Workload Before After Endpoint changes
supabase --version version 0 0
supabase --help help 0 0
supabase init init 0 0
supabase migration new bench migration-new 0 0
supabase config convert config-convert 0 0
supabase gen types --lang typescript --project-id replayfixtureprojref gen-types 2 2
supabase projects list projects-list 1 1
supabase functions list --project-ref replayfixtureprojref functions-list 2 2

Slowest phases

No command moved beyond noise, so there are no phase deltas.

Workflow run

Comment /bench to run the lightweight benchmark (this comment) again on the latest commit, or /bench full to also run the integration-heavy benchmark, which posts in its own comment.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 AI Review

Confirmed all three Claude findings. Rejecting Postgres 13 breaks previously accepted configurations, blocks remote database workflows, and leaves compatibility documentation stale. The type-generation impact is limited to paths that resolve a database connection; API-only generation is unaffected. Codex reported no findings.

Findings

Severity Location Category Sources Claim
🟠 MAJOR apps/cli/src/command-internal/config-validate.ts:292 breaking-change claude Rejecting db.major_version = 13 removes previously supported behavior. Existing projects using this configuration now fail local start, db start, db reset, and ordinary stop invocations during validation. The previous PG15 image mapping and PG13 schema bootstrap gave this value documented meaning. Please use a fix(cli)!: style title, add a BREAKING CHANGE: line to the PR description, and retarget the PR from develop to next.
🟠 MAJOR apps/cli/src/command-internal/config-validate.ts:292 correctness claude The shared rejection also blocks remote workflows when the resolved project configuration specifies major 13. db dump --linked and migration up/down --linked now fail even though they do not start a local database. Linked db pull, db diff, migration squash, and direct remote type generation are also affected, extending the removal beyond local database startup.
🟡 MINOR apps/cli/src/commands/start/SIDE_EFFECTS.md:305 documentation claude The command compatibility contracts still describe major 13 selecting the PG15 image, although the PR rejects that configuration and removes its image mapping.

Findings outside the diff

  • 🟡 MINOR apps/cli/src/commands/start/SIDE_EFFECTS.md:305 — The command compatibility contracts still describe major 13 selecting the PG15 image, although the PR rejects that configuration and removes its image mapping.

Stats

Claude findings: 3 · Codex findings: 0 · Confirmed: 3 · Refuted: 0 · Uncertain: 0


Models: claude-opus-5-5 + gpt-6.1-sol · Trigger: auto · Workflow run

This review runs once per PR. A maintainer can request another with a /ai-review comment.

supabase start and db start print a stderr warning when db.major_version
is 14: Postgres 14 reached end of life on November 12, 2026, and the CLI
will drop support for it soon.
@jgoux jgoux changed the title fix(cli): drop Postgres 13 support for local databases fix(cli): drop Postgres 13 and deprecate Postgres 14 for local databases Nov 12, 2026
@jgoux
jgoux added this pull request to the merge queue Nov 12, 2026
Merged via the queue into develop with commit 93dd0ed Nov 12, 2026
57 of 58 checks passed
@jgoux
jgoux deleted the fix/drop-postgres-13-local branch November 12, 2026 11:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants