Repository navigation
feat(postgres): ship OrioleDB beside stock 15 and 17 - #315
Merged
Merged
Conversation
Publish 17.x.x.NNN-orioledb as its own postgres release line so the portable bundle and derived image can track the OrioleDB engine without replacing the stock builds.
A partial results refresh must not drop the stock Postgres line, and an Oriole tag without postgresMajor must not fall back to the stock 17 bundle.
Round-robin only tags that can actually run, so a published or cooling prefix cannot use up another line's turn under the per-service cap.
The third release line is eligible from 17.9.0.028-orioledb, keeps its own ECR mirror slot, and records the published image size.
…tgres-line Adapt the OrioleDB line to immutable -rN release revisions: a line counts as published only once an <upstream>-rN release exists, manifests and results tables key lines by upstream_version, and force-rebuild docs are removed in favor of revisions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…onfig Upstream 17.11 OrioleDB tags prepend orioledb to shared_preload_libraries and beta18 tags add output_plugin_libraries; 17.9 tags append orioledb and set neither. Detect both from the selected tag's Dockerfile-orioledb-17 so every backlog tag matches its docker.io image. Results tables now fail when manifest selection fails, ignore manifests without upstream_version, and emit every release line so a missing line is reported instead of silently dropped. Drop the redundant first interleave in the poller and correct the OrioleDB extension wording. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Fail evaluation when Dockerfile-orioledb-17 adds orioledb in neither or both known forms, or sets output_plugin_libraries in an unknown form. Classify poll candidates once, drop the unreachable postgresMajor fallback and the Postgres row alias, replace the smoke's Python receipt classifier and its test hook with a bash helper, and remove docs that repeated release-line data. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e-b39926 # Conflicts: # scripts/test-nix-release.sh
jgoux
approved these changes
Oct 2, 2026
TFSebben
pushed a commit
to TFSebben/supabase_cli
that referenced
this pull request
Oct 9, 2026
## Summary
**TL;DR:** The experimental local stack can now run OrioleDB through
`db.orioledb_version`, on both the Docker and native runtimes. It uses
the new slim-services OrioleDB release line (`<upstream>-orioledb`). A
version without a published artifact fails closed, listing the supported
ones.
### Before
```mermaid
flowchart LR
A["db.orioledb_version set"] --> B{"experimental stack?"}
B -- yes --> C["error: unsupported by the experimental stack"]
B -- no --> D["Compose: docker.io supabase/postgres:<v>-orioledb"]
```
### After
```mermaid
flowchart LR
A["db.orioledb_version set"] --> B{"OrioleDB pin in catalog?"}
B -- no --> C["fail closed: lists published versions"]
B -- yes --> D["stack: slim <v>-orioledb-rN<br/>docker or native"]
D --> E["db diff / declarative shadow<br/>use the same pin"]
D --> F["data reuse only within<br/>the OrioleDB line"]
G["slim-services publishes<br/><v>-orioledb-r0"] --> H["catalog sync opens<br/>add postgres PR"]
H --> B
```
### Why
OrioleDB is leaving experimental. The new stack rejected
`db.orioledb_version` with `db.orioledb_version is unsupported by the
experimental stack`. supabase/slim-services#315 now builds and publishes
OrioleDB as its own Postgres release line, next to stock 15 and 17, so
the stack can pin it like any other artifact.
### What changed
- **Catalog sync.** `-orioledb` releases form their own catalog line
(`17-orioledb`).
- The first publish opens an `add` PR.
- Later releases upgrade or hotfix that line on their own.
- An OrioleDB release never touches the stock 17 pin, and the reverse.
- Legacy tags without `-rN` are ignored.
- **One version resolver.** `db.orioledb_version` (and
`SUPABASE_DB_ORIOLEDB_VERSION`) resolves to `<v>-orioledb` through one
shared resolver. `stack start`, the `db diff` shadow and its cache key,
and the versions output all use it.
- The setting requires `db.major_version = 17`.
- An unpinned version fails with the list of published versions.
- `postgresVersion("17")` still resolves to stock.
- **Data safety.** The ready-marker, `PG_VERSION` and snapshot checks
compare the engine line, not only the major. Stock and OrioleDB data,
snapshots and shadow caches never mix.
- Unmarked data, including data left behind by an interrupted first
start, is refused for an OrioleDB request.
- The error suggests `supabase stack destroy`.
- Switching `orioledb_version` on a saved stack requires `stack
destroy`, because the stack keeps its database version.
- **`test db`.** Maps OrioleDB to its major for pg_prove.
- **Declarative shadow.** No CLI-side handling: pg-delta's Supabase
profile treats `orioledb` as a platform extension
([supabase/pg-toolbelt#513](supabase/pg-toolbelt#513)),
so declarative export never emits it and the diff never creates or drops
it. Shipped in pg-delta `1.0.0-alpha.58`, which this PR pins.
- **Compose.** With `SUPABASE_USE_SLIM_IMAGES`, Compose maps
`supabase/postgres:<v>-orioledb` to the pinned slim OrioleDB image.
Unpinned versions stay on docker.io.
- **Docs.** `stack-commands.md`, `SIDE_EFFECTS.md`,
`packages/stack/ARCHITECTURE.md` and ADR 0026.
It also pins the first published OrioleDB release,
`17.11.0.002-orioledb-r0`, added with the catalog sync's `--release`
mode. Later OrioleDB releases arrive through the existing
`slim-release-published` sync.
## Linked issue
Part of CLI-2387. Depends on supabase/slim-services#315.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
TL;DR
Postgres slim images get a third release line, for Docker Hub tags
17.x.x.NNN-orioledb. It sits beside stock 15 and stock 17, so the new stack can run OrioleDB locally. The line follows immutable-rNrevisions from #326. Each Oriole tag is built from its own upstreamDockerfile-orioledb-17, so17.9.xand the17.11.xtags in upstreamansible/vars.ymlboth match their docker.io images.Before
After
flowchart LR A["Hub tag 17.x.x.NNN-orioledb"] --> B{"<upstream>-rN<br/>published?"} B -- yes --> S["skip"] B -- no --> C["dispatch; each line gets a turn"] C --> D["build psql_orioledb-17_cli_portable<br/>config from that tag's Dockerfile"] D --> E["parity vs docker.io tag"] E --> F["postgres-<upstream>-r0"]Why
OrioleDB graduates to beta on Oct 1, and the CLI is dropping its experimental flag. Slim images only shipped stock 15 and 17. Upstream now pins
postgresorioledb-17: "17.11.0.002-orioledb"beside17.11.0.002and15.19.0.002(vars.yml). The Oriole config also changed across those tags:orioledbis appended to the preload list.output_plugin_libraries.orioledbmoves to the front of the preload list.What changed
^17\.[0-9]+\.[0-9]+\.[0-9]{3}-orioledb$line with floor17.9.0.028-orioledb. PG15 Oriole tags, arch-specific tags and other suffixes stay ignored.psql_orioledb-17_cli_portableis built fromDockerfile-orioledb-17:orioledbis preloaded anddefault_table_access_method = orioledb.00-pre-init.sqlcreates the extension.output_plugin_librariesare read from the selected tag's Dockerfile, not from a version comparison.17_20or17_22as Oriole. UID/GID come from that Hub tag's digest.postgres-<upstream>-rNexists. The existing legacypostgres-17.9.0.028-orioledbis frozen and will be republished as-r0.upstream_version.After merge, the poller publishes the Oriole backlog as
-r0:17.9.0.028,17.9.0.029,17.11.0.001and17.11.0.002(all-orioledb). To dispatch one by hand:Validation
repository-checkspasses. The poller, release-results and ecr-mirror tests cover one row per line and ignoring legacy releases.service-releasevalidation_onlyon this branch for every Oriole backlog tag: all green, including docker.io parity: 17.9.0.028, 17.9.0.029, 17.11.0.001, 17.11.0.002.🤖 Generated with Claude Code