Status: BLOCKED — do not start until both external gates below are open.
This is the final phase of PostgreSQL 19 support. Phases 1 and 2 are already merged (#383, #386); everything left is gated on PostgreSQL 19 going GA and Citus publishing PG19 packages.
Blocking gates
Both must be true before any step below is executed:
⚠️ Hard ordering constraint — read before dispatching update_version.yml
update_docker.py sets latest_postgres_version = postgres_19_version, so the latest and alpine images are generated from whatever postgres_19_version holds in pkgvars.
pkgvars currently reads postgres_19_version=19beta3.
If update_version.yml is dispatched for the Citus 15 release while pkgvars still says 19beta3, citus:latest and citus:alpine will be pinned to a PostgreSQL 19 beta. Step 1 must land before any release dispatch.
Note this is not triggered by merging to master — update_version.yml is workflow_dispatch only, and the publish workflows only build the Dockerfiles as they already exist in the repo.
Steps, in order
Verified side effects of step 5
Running the v0.8.39 generator against current master produces exactly these changes, which are expected and correct:
Dockerfile / alpine/Dockerfile — rebased onto postgres_19_version (hence step 1).
Dockerfile — postgresql-$PG_MAJOR-hll 2.19 → 2.21 and topn 2.7.0 → 2.7.1. This is pre-existing drift: latest currently ships older hll/topn than pg17/pg18. It self-corrects here, so no separate fix is needed.
postgres-19/Dockerfile — Citus 14.1.0 → release version (step 4).
postgres-17/Dockerfile — trailing-newline-only change, cosmetic.
Also self-corrects at this point
publish_docker_images_on_manual.yml passes no --image_type, which is an intentional "build all regular images" mode. Its main trigger currently fails because postgres_19 cannot build. Once the gates above are open it works again with no change. It is workflow_dispatch-only, so impact until then is limited.
Context
Status: BLOCKED — do not start until both external gates below are open.
This is the final phase of PostgreSQL 19 support. Phases 1 and 2 are already merged (#383, #386); everything left is gated on PostgreSQL 19 going GA and Citus publishing PG19 packages.
Blocking gates
Both must be true before any step below is executed:
library/postgreshas only19beta1,19beta2,19beta3— no GA tag.postgresql-19-citus-<ver>published on repos.citusdata.com. As of 2026-09-02 nopostgresql-19-cituspackage exists at any version (PG19 currently has onlyhllandtopn).update_version.ymlupdate_docker.pysetslatest_postgres_version = postgres_19_version, so thelatestandalpineimages are generated from whateverpostgres_19_versionholds inpkgvars.pkgvarscurrently readspostgres_19_version=19beta3.If
update_version.ymlis dispatched for the Citus 15 release whilepkgvarsstill says19beta3,citus:latestandcitus:alpinewill be pinned to a PostgreSQL 19 beta. Step 1 must land before any release dispatch.Note this is not triggered by merging to
master—update_version.ymlisworkflow_dispatchonly, and the publish workflows only build the Dockerfiles as they already exist in the repo.Steps, in order
pkgvars—postgres_19_version=19beta3→ the PG19 GA version. Must precede step 5.postgres_19to the build matrices inpublish_docker_images_on_push.yml,publish_docker_images_cron.ymlandpublish_docker_images_on_tag.yml.README.md(line 11) for the new supported-version set.postgres-19/Dockerfileis on the current Citus version. It is currentlyARG VERSION=14.1.0/postgresql-$PG_MAJOR-citus-14.1; regeneration will move it to the release version, so this should be a no-op once step 5 runs.update_version.ymlfor the Citus 15 release. This regeneratesDockerfile,alpine/Dockerfile,postgres-17/18/19/Dockerfileand the changelog from the templates incitusdata/tools.Verified side effects of step 5
Running the
v0.8.39generator against currentmasterproduces exactly these changes, which are expected and correct:Dockerfile/alpine/Dockerfile— rebased ontopostgres_19_version(hence step 1).Dockerfile—postgresql-$PG_MAJOR-hll2.19→2.21andtopn2.7.0→2.7.1. This is pre-existing drift:latestcurrently ships olderhll/topnthanpg17/pg18. It self-corrects here, so no separate fix is needed.postgres-19/Dockerfile— Citus14.1.0→ release version (step 4).postgres-17/Dockerfile— trailing-newline-only change, cosmetic.Also self-corrects at this point
publish_docker_images_on_manual.ymlpasses no--image_type, which is an intentional "build all regular images" mode. Itsmaintrigger currently fails becausepostgres_19cannot build. Once the gates above are open it works again with no change. It isworkflow_dispatch-only, so impact until then is limited.Context
postgres-18/,postgres-19/,pkgvarsentries)v0.8.39v0.8.39