Drop PG16 from the test images - #240
Merged
Merged
Conversation
Citus main is dropping PG16 support, making PG17 the minimum supported version. Stop building PG16 test images and remove the PG16 citus-upgrade version list. Mirrors #178, which did the same for PG15. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 7b92da71-e0c2-4baf-b47d-c81ec58da88b
…images # Conflicts: # circleci/images/Makefile
This was referenced Aug 27, 2026
Onur Tirtir (onurctirtir)
approved these changes
Sep 1, 2026
ibrahim halatci (ihalatci)
added a commit
to citusdata/citus
that referenced
this pull request
Sep 1, 2026
PR 1 of 2 for [#8750](#8750) — drops PostgreSQL 16 support. Supported set becomes **PG17 + PG18**. This mirrors the PG15 drop (`62a919066`): PR 1 covers build plumbing, source, and CI; PR 2 covers test output / helper cleanup. ##⚠️ Merge ordering This PR depends on [citusdata/the-process#240](citusdata/the-process#240), which removes PG16 from the test image definitions. `image_suffix` is **temporarily** pinned to the dev images from that PR (`-dev-ef6cc68`) in a separate, clearly labelled commit. Once CI is green here, `the-process#240` is merged and the release images are published, that commit gets replaced with the new stable `-v<sha>` suffix and this PR moves out of draft. ## What changed **Build plumbing** - `configure.ac` / `configure` — PG16 no longer accepted; configure now fails with `Citus is not compatible with the detected PostgreSQL version 16.` - `src/include/pg_version_constants.h` — dropped `PG_VERSION_16` - `.gitattributes` — dropped the `ruleutils_16.c` entry **Files** - Deleted `src/backend/distributed/deparser/ruleutils_16.c` (9235 lines) - Renamed `pg_get_object_address_16_17_18.c` → `pg_get_object_address_17_18.c` **Sources** - `src/include/pg_version_compat.h` — 480 → 437 lines; the pre-PG17 compat half is gone - 52 `PG_VERSION_17` guard blocks removed across 19 files, plus the now-dead `hasPseudoconstantQuals` helper and the PG16 `makeStringConst` fallback **Deprecated GUC** `citus.enable_outer_joins_with_pseudoconstant_quals_pre_pg17` is left **defined but inert** rather than removed, so existing configs don't fail to start. It now carries a deprecation description and a check hook that warns whenever it is set from any non-default source (session `SET`, `ALTER SYSTEM`, `ALTER DATABASE/ROLE ... SET`, `postgresql.conf`): ``` WARNING: citus.enable_outer_joins_with_pseudoconstant_quals_pre_pg17 is deprecated and has no effect ``` A clean install that never touches the GUC stays silent, and a value persisted across a restart does not produce per-backend log spam. Removal is tracked in [#8751](#8751) for 15.1. **CI / devcontainer** - `build_and_test.yml` — dropped the `pg16_version` param and every matrix entry that used it; `upgrade_pg_versions` → `17.10-18.4`; `test-pg-upgrade` reduced to just 17→18 - `flaky_test_debugging.yml` — `vars.pg16_version` → `vars.pg17_version` - `.devcontainer/Dockerfile` — removed the `pg16` build stage - `.github/actions/setup_cassert_pg/action.yml` — doc-string example updated ## Verification | Check | Result | |---|---| | Build against PG 17.10 | ✅ clean, zero warnings | | Build against PG 18.4 | ✅ clean, zero warnings | | Configure against PG 16.14 | ✅ correctly rejected | | GUC warning behaviour (set / reset / `ALTER SYSTEM` / restart) | ✅ as described above | | `banned.h.sh`, `check_gucs_are_alphabetically_sorted.sh`, `editorconfig.sh` | ✅ pass | ## Follow-ups (deliberately not in this PR) - PR 2 — test output and helper cleanup, incl. removing the three GUC `SET`/`RESET` pairs in `pg17.sql` that would otherwise pull the new warning into expected output - [#8754](#8754) — `test-citus-upgrade` is missing PG18 - [#8755](#8755) — dead pre-PG16 shims in `sql/udfs/` --------- Co-authored-by: Ibrahim Halatci <ihalatci@microsoft.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 7b92da71-e0c2-4baf-b47d-c81ec58da88b
ibrahim halatci (ihalatci)
added a commit
to citusdata/citus
that referenced
this pull request
Sep 2, 2026
DESCRIPTION: Quote EXTRACT fields and support latest PostgreSQL minors Fixes #8803. ## Changes - quote EXTRACT field identifiers in the copied PG17 and PG18 ruleutils implementations; `ruleutils_19.c` already carries the equivalent fix from #8753; - run one discriminating, repeat-safe regression across supported PostgreSQL versions from the N-1-excluded create-Citus schedule; PG19 retains its dedicated #8753 coverage; - bump CI coverage from 17.10 / 18.4 to 17.11 / 18.6; - forward-port the already-landed release-14 fallout for the new PostgreSQL security minors, including `output_plugin_libraries` handling and modern psql COPY behavior; - add PG18 to the `test-citus-upgrade` matrix. ### PG18 citus upgrade coverage `citusupgradetester` is built and published for PG18 (`CITUS_UPGRADE_VERSIONS_18=v14.2.0`), but the matrix listed only PG17, so that image was built and never exercised. This adds it, matching the convention on `release-14.0`, which lists every supported major except the newest. PG19 stays out deliberately. The image compiles released Citus from source, and no released Citus supports PG19 yet, which is why the-process filters it out of `CITUS_UPGRADE_PG_VERSIONS`. PG19 upgrade paths are still covered by `test-pg-upgrade`, whose matrix already includes 17→18, 18→19, and 17→19. ## Cross-repo dependency The test images are built by [the-process#244](citusdata/the-process#244), stacked above [the-process#240](citusdata/the-process#240). Both have merged, along with #8757 and #8764, so this PR is last in that sequence and now pins the released `-vdba9cbb` suffix. ## Validation - `-Werror` builds: PostgreSQL 17.11, 18.6, and 19beta3 - shared `extract_deparse`: 8/8 repetitions on each of PostgreSQL 17.11, 18.6, and 19beta3 - focused PG17, PG18, and PG19 version regressions - focused `split_output_plugin_denied` regression on PG18.6 - `citus_indent --check` - SQL snapshot and test-schedule checks - `pg_regress_multi.pl` syntax check - all 13 image tags referenced by the workflow resolved against GHCR at the `-vdba9cbb` suffix before pinning ## Known limitation carried over from the release branches The `output_plugin_libraries` preflight splits the GUC on commas, so a plugin name containing a comma inside a quoted element (`"a,b"`) is not parsed the way PostgreSQL's `SplitGUCList` would parse it. This is unreachable for the name `citus` and matches what already shipped on release-14.0, release-13.2, and release-12.1. --------- Co-authored-by: Ibrahim Halatci <ihalatci@microsoft.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: ihalatci <10450368+ihalatci@users.noreply.github.com> Co-authored-by: ihalatci <ihalatci@users.noreply.github.com> Copilot-Session: 7c6370b2-06fd-4491-bf92-ecb811d34518
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.
Citus
mainis dropping PG16 support (citusdata/citus#8750), making PG17 the minimum supported PostgreSQL version. The supported set becomes PG17 + PG18.This stops building the PG16 test images and removes the PG16 citus-upgrade version list.
circleci/images/PG_VERSIONS: dropPG16=16.14circleci/images/Makefile: dropCITUS_UPGRADE_VERSIONS_16=v12.1.14and its commentMirrors #178, which did exactly this for PG15.
Merge order
This needs to merge before the citus PR can go green, since citus pins images by
the-processmaster SHA viaimage_suffix:image_suffixin the citus PR to the new stable suffix.In the meantime the citus PR will use this branch's
-dev-image tag so it can be validated ahead of the merge.