Fix PostgreSQL 19 beta4 compatibility - #8870
Merged
Merged
Conversation
ibrahim halatci (ihalatci)
requested review from
Colm (colm-mchugh) and
Onur Tirtir (onurctirtir)
September 25, 2026 08:27
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #8870 +/- ##
==========================================
+ Coverage 88.69% 88.77% +0.08%
==========================================
Files 290 290
Lines 65155 65102 -53
Branches 8219 8220 +1
==========================================
+ Hits 57787 57795 +8
+ Misses 4993 4934 -59
+ Partials 2375 2373 -2 🚀 New features to boost your workflow:
|
Onur Tirtir (onurctirtir)
approved these changes
Sep 25, 2026
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
ibrahim halatci (ihalatci)
force-pushed
the
ihalatci-pg19-beta4-alignment
branch
from
September 25, 2026 14:22
af5bf09 to
f976d52
Compare
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
ibrahim halatci (ihalatci)
added a commit
that referenced
this pull request
Sep 28, 2026
## Summary - replace the PostgreSQL 19 Beta 4 development image suffix with the published immutable suffix `-vc231ab7` - invalidate cached metadata index OIDs whenever concurrent reindex replaces one of the 23 indexes stored in `MetadataCache` - preserve the worker-node cache in WAL senders so logical decoding never rebuilds it by scanning `pg_dist_node` - fix the repeatable PG19 vanilla `create_view` failure and the resulting shard-split isolation hang ## Root cause PostgreSQL's vanilla `create_index` test runs `REINDEX SCHEMA CONCURRENTLY pg_catalog` in parallel with `create_view`. Concurrent reindex replaces Citus catalog indexes incrementally rather than atomically. The initial implementation reset metadata OIDs only when the `pg_dist_object` table was invalidated. That fixed stale `pg_dist_object_pkey` OID `16757`, but a parallel backend could repopulate a later cached index while reindex was still progressing. CI subsequently failed on stale `pg_dist_schema_pkey` OID `17321`. The final implementation recognizes relcache invalidations for every index OID stored in `MetadataCache` and resets the cached OIDs each time one is replaced. The list covers all 23 `*IndexId` fields exactly, without catalog lookups inside the relcache callback or resets for unrelated relations. A full metadata reset is unsafe in WAL senders: it invalidates the worker-node cache, which then attempts to scan `pg_dist_node` inside logical decoding. PostgreSQL rejects that non-catalog scan, shard-split replication workers repeatedly restart, and `create_distributed_table_concurrently` waits indefinitely for replication catch-up. WAL senders therefore clear only `MetadataCache`, while ordinary backends retain the full metadata-system reset. ## Stable image evidence - citusdata/the-process#250 merged as `c231ab76c3c3d0e8e57d61bfecad08fb2d6132ac` - release publication run: https://github.com/citusdata/the-process/actions/runs/36310869157 - published immutable suffix: `-vc231ab7` - verified tags include `extbuilder:19beta4-vc231ab7`, `exttester:19beta4-vc231ab7`, `failtester:19beta4-vc231ab7`, and `pgupgradetester:17.11-18.6-19beta4-vc231ab7` ## Validation - PG19 non-cassert vanilla: 239/239 passed in 10 consecutive runs - PG19 cassert vanilla: 239/239 passed, including `create_view` - PG19 cassert `isolation_create_distributed_table_concurrently`: passed six final-candidate runs in 17-20 seconds - PG19 cassert `multi_1_create_citus_schedule`: 38/38 passed, including `multi_replicate_reference_table` and `pg19` - PG17.11 and PG18.6 builds: passed without source compiler warnings - PG19 Beta 4 cassert build/install with CI flags: passed - explicit cache audit: all 23 `MetadataCacheData` `*IndexId` fields covered exactly once - full repository style workflow and `git diff --check`: passed Follow-up to #8870 and citusdata/the-process#250. --------- Co-authored-by: Ibrahim Halatci <ihalatci@microsoft.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.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.
DESCRIPTION: Align Citus compatibility code with PostgreSQL 19 beta4
Summary
-dev-64e776f)19beta3to19beta4REL_19_BETA3andREL_19_BETA4mainUpstream delta
Replayed the applicable parts of PostgreSQL's
REL_19_BETA3..REL_19_BETA4src/backend/utils/adt/ruleutils.cdelta onto Citus's curatedruleutils_19.c: removed the fivepg_propgraph_*includes, graph-pattern deparse helpers, andRTE_GRAPH_TABLEbranches while preserving Citus-specific hooks and shard-aware deparsing.The Beta 4 build exposed two additional removed upstream symbols. This PR removes only their corresponding compatibility branches:
OBJECT_PROPGRAPHinpg_get_object_address_17_18.cRTE_GRAPH_TABLEincitus_nodefuncs.cCompatibility audit
Removes #8733. Retains #8622, #8624, #8741, #8784, #8785, and #8795 because their underlying PostgreSQL 19 behavior remains in beta4. Pending PG19 feature PRs are unchanged.
Closes #8597.
Validation
REL_19_BETA4from source under native Ubuntu-22.04 WSLPG_CONFIG=<beta4-prefix>/bin/pg_config ./configuremake -j"$(nproc)"make install -j"$(nproc)"src/test/regress/citus_tests/run_test.py pg19— all 7 tests passedcitus_indent --quiet --check— passedgit diff --check— passed in Windows and WSL checkoutsmake check-stylereaches the existing Python isort gate and reportssrc/test/regress/citus_tests/test/test_run_test.py, which is unchanged fromorigin/main. The C formatting check for this diff passes. Full Build & Test CI is required.