PostgreSQL 14-18 Durable Projection Matrix — 2026-07-14

Gate

cd graph
RUN_RUST_TESTS=0 PG_VERSIONS='14 15 16 17 18' RUN_PGRX_SQL=0 \
  RUN_GQL_WRITE_MATRIX=0 RUN_POSTGRES_SANITIZER=0 \
  RUN_DURABLE_PROJECTION_MATRIX=1 ./tests/heavy/run_pg_matrix_docker.sh

The release Rust and pgrx suites for the same five majors had already passed in the supported-major release matrix, so this run selected only the additional durable lifecycle, lock, and concurrent-DDL profiles.

Environment

  • Docker Desktop Linux arm64
  • PostgreSQL 14.23, 15.18, 16.14, 17.10, and 18.4
  • Rust 1.96.0
  • pgrx 0.19.1

Results

PostgreSQL Cross-backend durable lifecycle Publication and writer locks Concurrent relation DDL
14.23 PASS PASS PASS
15.18 PASS PASS PASS
16.14 PASS PASS PASS
17.10 PASS PASS PASS
18.4 PASS PASS PASS

The lock profile covers graph-scoped publication exclusion, competing publishers, exact watermark completion, legacy trigger rejection and refresh, active writer commit/rollback horizons, same-transaction ingestion rejection, artifact preservation after failed publication, and build/vacuum exclusion.

The concurrent-DDL profile holds PostgreSQL AccessExclusiveLock during a rename and a drop/recreate transaction. A concurrent build must stop at the relation lock with SQLSTATE 55P03. After commit, the renamed table rebuilds through the original registered OID, while the replacement table has a new OID and the old registration fails closed with explicit guidance.

During harness validation, the existing lock gate’s pre-named-graph artifact path assumption was corrected to resolve the selected graph UUID. The focused PostgreSQL 17 profile passed after that correction before the full matrix ran. The focused concurrent-DDL profile also passed on PostgreSQL 17 before it was added to the five-major matrix. The final matrix completed in 202 seconds.

An independent raw-diff review identified an unbounded failure-cleanup wait in the first harness revision. The final harness tracks the active coordination key, terminates its PostgreSQL backend, and applies bounded TERM/KILL handling to client processes before waiting. Shell syntax, ShellCheck, and the focused PostgreSQL 17 profile passed after the fix; independent follow-up review passed without remaining findings.