feat: PostgreSQL 18 support, current Supabase bases, and wide-table payload apply - #62
Merged
Conversation
…SQL 18 (#63) Supabase moved both the PG15 and PG17 lines to an Alpine userland, so :17 builds on 17.6.1.170 and :15 on 15.14.1.170 (also PostgreSQL 15.8 -> 15.14), and :<major> now simply tracks whatever base Supabase ships. The transitional -alpine tag and the tag_suffix mechanism are removed with it. Closes #59. Adds PostgreSQL 18: release artifacts, CI tests, and a :18 image. PG18 keeps its data in a major-version subdirectory and refuses to start when a volume is mounted at /var/lib/postgresql/data, so the compose files and the quickstart mount the parent path, which works on every supported major. Also folds the orphaned [Unreleased] changelog entries into [1.1.3], rewrites the :15 entry for the new base, and fixes the website changelog workflow, which listened for v-prefixed tags that this repo never creates.
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.
Release 1.1.3. Two independent changes landed together deliberately: merging the wide-table fix on its own would have cut the release immediately and published
:17on the frozen17.6.1.071and:15on15.8.1.135— the exact bases the second change retires.Closes #59.
Wide-table payload apply
PostgreSQL's statement wrapper held bound parameters in fixed 32-slot arrays, so any statement needing more than 32 values failed. That limit was never reachable from user SQL — the
dbvmlayer only ever runs engine-generated statements — but it was not bounded by a constant either: the merge path bindsnpks + one per column in the batch, so any synced table wider than ~32 columns hit it. The arrays now grow dynamically and are owned by the statement.test/postgresql/56_many_columns.sqlcovers INSERT and UPDATE payload apply at 33 and 128 total columnsCurrent Postgres and Supabase bases
Supabase moved both the PG15 and PG17 lines to an Alpine userland, so
:17builds on17.6.1.170and:15on15.14.1.170— the latter also advancing PostgreSQL 15.8 → 15.14.17.6.1.071(Ubuntu, frozen)17.6.1.170(Alpine)15.8.1.135queued (Ubuntu)15.14.1.170(Alpine)17,1518,17,15With both majors on one family the transitional
-alpinetag has nothing left to distinguish, so it and thetag_suffixmechanism are removed. The durable rule is now:<major>tracks whatever base Supabase currently ships — which is what #59 asked to settle. That issue's two-release migration plan (publish:17-ubuntu, announce deprecation, then flip) existed to protect existing:17pins; there are none, so the alias moves in one step. Its naming question is moot for a second reason: it assumed PG15 stays on Ubuntu, and Supabase has since moved it to Alpine too.PostgreSQL 18
Added to
postgres-test,postgres-build(four arch/OS rows) anddocker-publish, producingcloudsync-postgresql18-*artifacts andsqlitecloud/sqlite-sync-postgres:18. There are noPG_VERSION_NUMguards insrc/postgresql/, so 18 compatibility was the open question — it builds and passes clean. PG19 is still beta3; skipped.PG18 keeps its data in a major-version subdirectory and refuses to start when a volume is mounted at
/var/lib/postgresql/data, even on a clean volume. The compose files and the PostgreSQL quickstart mount the parent/var/lib/postgresql, which works on 15 and 17 as well.Also
.github/workflows/changelog.ymllistened forv*.*.*tags, butmain.ymlcreates release tags without the prefix (1.1.2), so the website changelog sync never fired automatically on a release.[Unreleased]changelog entries are folded into[1.1.3]; the:15entry is rewritten, since its Ubuntu-24.04 uid numbers no longer describe the move.docker/README.mdclaimed the dev container runs PostgreSQL 16, and that the build-from-source flow assumes an Ubuntu base (fixed by fix: make local Supabase build-from-source work on Alpine bases #61).Tests
Wide-table fix:
Bases and PG18:
CREATE EXTENSIONsucceeds on both new Supabase bases —cloudsync_version()= 1.1.3 on PostgreSQL 15.14 and 17.6,postgresuid100:101on eachmake postgres-check-migration: passed; patch release requires no SQL migrationNot covered: the new PG15 Alpine base inside a full self-hosted Supabase stack. Alpine 17 was validated that way on Fly.io (#59); PG15 has only the
CREATE EXTENSIONsmoke test that CI runs.Publishing effects on merge
This merge cuts release 1.1.3 and publishes to Docker Hub:
:15moves from base15.8.1.085to15.14.1.170,:17from17.6.1.071to17.6.1.170, and:18appears for the first time.:17-alpinestops being updated and stays at 1.1.2.🤖 Generated with Claude Code
https://claude.ai/code/session_01CCE6B54Qtf3UsaCVAJtVQF