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.