Skip to content

Drop PG16 from the test images - #240

Merged
ibrahim halatci (ihalatci) merged 2 commits into
masterfrom
ihalatci-drop-pg16-images
Sep 1, 2026
Merged

Drop PG16 from the test images#240
ibrahim halatci (ihalatci) merged 2 commits into
masterfrom
ihalatci-drop-pg16-images

Conversation

@ihalatci

Copy link
Copy Markdown
Contributor

Citus main is 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: drop PG16=16.14
  • circleci/images/Makefile: drop CITUS_UPGRADE_VERSIONS_16=v12.1.14 and its comment

Mirrors #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-process master SHA via image_suffix:

  1. Merge this PR so the images are rebuilt.
  2. Update image_suffix in the citus PR to the new stable suffix.
  3. Citus PR citusdata/citus#8750 (PR 1) goes green.

In the meantime the citus PR will use this branch's -dev- image tag so it can be validated ahead of the merge.

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
@ihalatci
ibrahim halatci (ihalatci) merged commit 609733f into master Sep 1, 2026
16 checks passed
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
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.

3 participants