Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
6741 commits
Select commit Hold shift + click to select a range
620fcec
Regenerate 7 more expected files from run20 (batch 4)
dimoffon Jun 11, 2026
63934dd
limit_optimizer: PG14 WITH TIES error wording (variant missed earlier)
dimoffon Jun 11, 2026
fbe7313
returning_gp: un-bake the cross-partition UPDATE RETURNING failure
dimoffon Jun 11, 2026
84d50ea
select_into: mask per-segment actual row counts in EXPLAIN ANALYZE
dimoffon Jun 11, 2026
c03669d
copy/tablespace: port GPDB divergences into the .source outputs
dimoffon Jun 11, 2026
3cab355
Fix all multi-DQA aggregates returning NULL/0 (PG14)
dimoffon Jun 11, 2026
76c2688
Regenerate DQA-era expected files from corrected output (batch 5)
dimoffon Jun 11, 2026
8af6a1f
incremental_analyze: mask root-partition merged-stat estimates
dimoffon Jun 11, 2026
b3adb17
Stabilize the remaining flapping regress assertions
dimoffon Jun 11, 2026
269e342
Honor per-Aggref aggsplit for combine and skipfinal decisions (PG14)
dimoffon Jun 11, 2026
8d09b07
Regress: clear the last fix-era bakes and tie-order flaps
dimoffon Jun 11, 2026
97027bf
Number Aggrefs in SCATTER BY expressions (PG14)
dimoffon Jun 11, 2026
b8266fa
Restore the input motion for window functions (PG14)
dimoffon Jun 11, 2026
9a30d12
Restore CREATE FUNCTION ... WITH (attribute list) syntax (PG14)
dimoffon Jun 11, 2026
ed2b242
create_index: align expected with the f1[0] tiebreak ordering
dimoffon Jun 11, 2026
6abfb5e
Register the DESCRIBE callback at CREATE FUNCTION again (PG14)
dimoffon Jun 11, 2026
67c396e
Regenerate window-function expected files post motion fix (batch 6)
dimoffon Jun 11, 2026
8e6aba0
Regress: final stabilizations for table_functions and incremental_ana…
dimoffon Jun 11, 2026
274f784
Set tts_tableOid in AO/AOCS bitmap fetches (PG14)
dimoffon Jun 11, 2026
9aa93e7
uao_catalog_tables: refresh AO auxiliary-name masking tokens
dimoffon Jun 11, 2026
f1ccc14
Revert "uao_catalog_tables: refresh AO auxiliary-name masking tokens"
dimoffon Jun 11, 2026
553d221
Row identity for DML on append-optimized auxiliary relations (PG14)
dimoffon Jun 11, 2026
1d83bef
Regen uao/uaocs_catalog_tables expecteds; fix init_file $1 perl warning
dimoffon Jun 11, 2026
2e58fed
pageinspect: install 1.9 script and compile gistfuncs.c (PG14)
dimoffon Jun 11, 2026
f78b83b
Fix PG14 API drift in test harnesses: isolation2, heap_checksum, work…
dimoffon Jun 11, 2026
bae773e
ORCA: treat PG14 reltuples=-1 as empty in cdb_estimate_partitioned_nu…
dimoffon Jun 11, 2026
9c3ed35
pg_dump: repair merge-stitched PREPARE queries (dumpFunc, dumpRangeTy…
dimoffon Jun 11, 2026
3305daf
Restore GPDB error-location suffix for internal errors (PG14)
dimoffon Jun 11, 2026
0b94843
Fix OpenSSL build gating for PG14: with_openssl -> with_ssl
dimoffon Jun 11, 2026
54b6c61
gppc: translate GppcReportLevel to/from PG14 elog levels
dimoffon Jun 11, 2026
a318efb
gpfdist regress: PG14 TRUNCATE-on-foreign-table message
dimoffon Jun 11, 2026
baf97ab
plpgsql_array test: rename "complex" type; collides with GPDB builtin
dimoffon Jun 11, 2026
cf3d387
gpload: finish the PyGreSQL -> psycopg2 port
dimoffon Jun 11, 2026
fcfd0b5
isolation: accept unquoted session/step names in spec files (PG14)
dimoffon Jun 11, 2026
e8baadc
Restore GPDB wait events lost in the PG14 pgstat split
dimoffon Jun 11, 2026
bc9b4a9
Treat PG14's reltuples=-1 as "never analyzed" in leaf stats merge gate
dimoffon Jun 11, 2026
ca1a935
Regenerate 17 regress expecteds for restored elog suffixes and reltup…
dimoffon Jun 11, 2026
faafc7a
Fix checkCpuSetByRole semicolon scan reading past the cpuset string
dimoffon Jun 11, 2026
14dd2d0
pg_rewind: run crash-recovery postgres against DB_FOR_COMMON_ACCESS a…
dimoffon Jun 11, 2026
3ee3aec
Serialize StatsElem in binary node functions (PG14)
dimoffon Jun 11, 2026
a9238fd
Close latent raw-statement binary dispatch gaps: ON CONFLICT, WindowD…
dimoffon Jun 11, 2026
a2ed657
pg_upgrade test: create the new cluster with the inherited locale
dimoffon Jun 11, 2026
372af6e
Regenerate isolation2 lockmodes_optimizer for PG14 partition DML locking
dimoffon Jun 11, 2026
a368562
isolation2: autovacuum-analyze expects reltuples=-1 for never-analyze…
dimoffon Jun 11, 2026
074ef5c
external_table: per-branch LIMIT scans may stop before reaching the r…
dimoffon Jun 11, 2026
0cfef15
Do not dispatch AT_ReAddStatistics; read CreateStatsStmt in binary re…
dimoffon Jun 11, 2026
d4347cd
gpload: match PyGreSQL error text and default notice printing
dimoffon Jun 11, 2026
f8648f0
Run clang-format over earlier ORCA fixes
dimoffon Jun 11, 2026
b2a77fc
Regenerate analyze/vacuum_gp/bfv_partition for restored leaf stats merge
dimoffon Jun 11, 2026
808817a
Regenerate gpsd/dpe_optimizer for restored leaf stats merge
dimoffon Jun 11, 2026
3a92b2c
Restore libpq errorMessage reset on connection success (PG14)
dimoffon Jun 12, 2026
4700ef9
pg_dump: emit GPDB 3-arg binary-upgrade calls for pg_type OIDs (PG14)
dimoffon Jun 12, 2026
58eafe0
Dispatch ALTER TYPE ... SET (...) to segments (PG14)
dimoffon Jun 12, 2026
f054f2e
Fix lost QE dispatch in ReindexMultipleInternal: shadowed result (PG14)
dimoffon Jun 12, 2026
df7123e
Do not set PROC_IN_VACUUM: GPDB vacuums write data (PG14)
dimoffon Jun 12, 2026
3a8be6c
Test baselines and harness fixes for PG14 (run3 triage)
dimoffon Jun 12, 2026
7acb7ae
Regenerate decode_expr/as_alias expecteds under en_US.UTF-8
dimoffon Jun 12, 2026
2254fdf
ssl test suite: survive stale client certs and always tear down
dimoffon Jun 12, 2026
ce1a82d
prevent_ao_wal: do not leave the standby coordinator broken (PG14)
dimoffon Jun 12, 2026
0852a60
Restore base_backup_post_create_checkpoint fault point (PG14)
dimoffon Jun 14, 2026
c4dfe4f
Fix coordinator SyncRep: exempt QD from sync_standbys_defined fast-ex…
dimoffon Jun 14, 2026
542296d
Restore bg_quickdie SIGQUIT handler in bgwriter (PG14)
dimoffon Jun 14, 2026
6e363e8
JIT: register GPDB fast ScalarArrayOp evaluators in llvmjit_types.c
dimoffon Jun 15, 2026
d967c24
Initialize subplans nested across Motions in deeply-nested Init Plans
dimoffon Jun 15, 2026
36f871f
behave/gpcheckcat: use a prefix operator (PG14 removed postfix operat…
dimoffon Jun 15, 2026
b049563
behave/gpexpand: use a locally-provided dump.sql if present
dimoffon Jun 15, 2026
840d136
Hold interrupts around wait_for_mirror() in the gxact-not-found path …
dimoffon Jun 15, 2026
afb865e
Label only real columns of a Split Update subplan in ModifyTable (PG14)
dimoffon Jun 15, 2026
6c05caa
Accept ROWID_VAR in set_plan_references_input_asserts (PG14)
dimoffon Jun 15, 2026
9891131
Fix invalid SingleQE locus when gathering General non-recursive term …
dimoffon Jun 15, 2026
a5ae771
Remove orphaned pq_endmsgread() at end of COPY FROM (PG14)
dimoffon Jun 15, 2026
db8ab39
Hold interrupts around the replication-lag throttle's SyncRepWaitForL…
dimoffon Jun 15, 2026
4750526
Allow NULL index_delete_tuples for append-only table AMs (PG14)
dimoffon Jun 15, 2026
1adbcfb
Don't assert s1 untouched when extended stats seed it (PG14)
dimoffon Jun 15, 2026
1e62c62
Don't assert no open write buffers in LogicalTapeSetBlocks (assert bu…
dimoffon Jun 15, 2026
fd514a3
Exempt cursor readers from the GetCmin/GetCmax current-xid assert (MP…
dimoffon Jun 15, 2026
d12bd66
Give AO UPDATE a non-empty old slot for ExecGetUpdateNewTuple (assert…
dimoffon Jun 15, 2026
9213254
Avoid mirror PANIC on AO truncate redo of a segfile missing post-cons…
dimoffon Jun 16, 2026
906ec48
Restore pg_rewind preservation of internal.auto.conf (segment gp_dbid)
dimoffon Jun 16, 2026
277e019
Revert "Avoid mirror PANIC on AO truncate redo of a segfile missing p…
dimoffon Jun 16, 2026
fa65034
Don't assert non-NULL expr in extract_nodes_expression (ORCA assert b…
dimoffon Jun 16, 2026
524960d
resgroup_cpuset: use factorial() not the removed postfix ! operator (…
dimoffon Jun 16, 2026
629e87c
regress: bump stale elog line numbers in matview/gp_dqa optimizer ans…
dimoffon Jun 16, 2026
7e50338
matview: fix REFRESH ... CONCURRENTLY column ref to prefixed transien…
dimoffon Jun 16, 2026
8a289bd
Fix multi-DQA FILTER planning: strip aggfilter from plan targets (PG14)
dimoffon Jun 16, 2026
1484411
Fix ExecTupleSplit infinite loop on a DQA without a FILTER
dimoffon Jun 16, 2026
1166d4c
Interpose a Result when a Motion's input is itself a Motion
dimoffon Jun 16, 2026
bf5697a
Match a distribution-key Aggref ignoring PG14 aggno/aggtransno
dimoffon Jun 16, 2026
4fee059
matview: qualify whole-row refs with .* in REFRESH ... CONCURRENTLY
dimoffon Jun 16, 2026
7e909f5
Skip MIN/MAX index optimization when planner state is already populated
dimoffon Jun 16, 2026
d0b7298
regress: add PG14 \d+ Compression column to matview.out
dimoffon Jun 16, 2026
7892d7e
regress: adopt PG14 geometric operator rename in create_index
dimoffon Jun 17, 2026
6b6e7bf
regress: regenerate optimizer=off baseline answer files (PG14 cosmetic)
dimoffon Jun 17, 2026
ad649ea
regress: regenerate join/portals/subselect optimizer=off answers
dimoffon Jun 17, 2026
2e9261c
docs: add project skills and point CLAUDE.md at greengage-internals
dimoffon Jun 17, 2026
21b9ab6
docs: rename GPDB -> GGDB in skills and CLAUDE.md
dimoffon Jun 17, 2026
b4275d4
regress: un-break ORCA job after cosmetic regen + code-fix line shifts
dimoffon Jun 17, 2026
2f388c9
regress: regenerate opt=off base answers from CI results (un-contamin…
dimoffon Jun 17, 2026
e3c9618
regress: refresh opt=off table_functions base for PG14 upstream text …
dimoffon Jun 17, 2026
23db61b
regress: stabilize explain under the JIT jobs via SET jit = off
dimoffon Jun 17, 2026
d0f8d9f
skills: fold CI-result regen rules + explain jit fix into answer-file…
dimoffon Jun 17, 2026
27a6421
regress: add _optimizer variants for create_function_3/select_into/ti…
dimoffon Jun 17, 2026
541269c
regress: fix opt=off table_functions plan-shape + extract trailing space
dimoffon Jun 17, 2026
87b0fcd
regress: normalize now()-derived date in direct_dispatch plan (daily …
dimoffon Jun 17, 2026
ef32d10
regress: add gp_pg14_merge_regress lock-in test for the PG14 merge MP…
dimoffon Jun 17, 2026
4dd440a
orca: fall back to the planner for GROUP BY DISTINCT (PG14)
dimoffon Jun 17, 2026
371acbb
regress: add gp_pg14_features MPP/ORCA coverage for PG14 features
dimoffon Jun 17, 2026
677e3ae
skills: note that _optimizer.out coverage is self-balancing (don't ba…
dimoffon Jun 17, 2026
a235ac4
orca: fall back to the planner for multirange-returning aggregates (P…
dimoffon Jun 17, 2026
58a00a9
regress: extend gp_pg14_features with subscripting/extract/range_agg …
dimoffon Jun 17, 2026
1ab69ad
skills: add greengage-pg-merge; retire the GG_PG_13_14_MERGE_* docs
dimoffon Jun 17, 2026
67c0b3d
Merge PostgreSQL 15 (adadae45816) into GreengageDB
dimoffon Jun 19, 2026
74f3865
Fix two PG15-merge crashers in partitioned/CREATE DATABASE paths
dimoffon Jun 19, 2026
0609651
Fix REFRESH MATERIALIZED VIEW security-context leak
dimoffon Jun 19, 2026
912dd14
Fix SET <float GUC> crash (DispatchSetPGVariable A_Const)
dimoffon Jun 19, 2026
b7d31f9
Fix EXPLAIN ANALYZE crash on Sort with a Generation child context
dimoffon Jun 19, 2026
eafde81
Fix dispatch desync for CREATE TABLE with PRIMARY KEY / UNIQUE
dimoffon Jun 19, 2026
49cc1a3
Fix assert crash building AO auxiliary-table indexes (GlobalVisHorizo…
dimoffon Jun 19, 2026
18c9f9b
Fix segment crash creating an in-place tablespace (LOCATION '')
dimoffon Jun 19, 2026
37d4509
Fix DTX PANIC on COMMIT/ROLLBACK AND CHAIN
dimoffon Jun 19, 2026
a4b270e
Dispatch PG15 SQL/JSON nodes (JSON_TABLE/JSON_VALUE/IS JSON/…)
dimoffon Jun 19, 2026
11ec71b
Dispatch PG15 untransformed SQL/JSON and publication parse nodes
dimoffon Jun 19, 2026
a2f3ead
Support MERGE on distributed tables (MPP)
dimoffon Jun 19, 2026
d473667
Fix "unexpected end of tape" in external merge sort
dimoffon Jun 19, 2026
169d590
Fix DROP DATABASE assert crash from stale dshash find_locked flag
dimoffon Jun 19, 2026
9a30074
Bring up PG15 backend: build, link, and initdb
dimoffon Jun 19, 2026
3d15387
Adopt PG15 regress test_setup; drop GGDB duplicate object creation
dimoffon Jun 19, 2026
324004d
Fix segment PANIC on CREATE/ALTER PUBLICATION FOR ALL TABLES IN SCHEMA
dimoffon Jun 19, 2026
437ad65
Fix segment SIGSEGV on MERGE with a subquery in a WHEN action
dimoffon Jun 19, 2026
a454887
Allow UNBOUNDED as an unreserved keyword (usable as a name)
dimoffon Jun 20, 2026
f04d525
Fix wrong error altering type of a column used by a generated column
dimoffon Jun 20, 2026
783145a
Neutralize JSON_TABLE nested-PLAN crash in jsonb_sqljson
dimoffon Jun 20, 2026
b6acf15
Make gp_gin_index self-contained (create its own testjsonb/test_tsvec…
dimoffon Jun 20, 2026
bdf57fb
Fix PANIC 'can only drop stats once' on DROP DATABASE
dimoffon Jun 20, 2026
053f952
Add text serialization for GpPolicy nodes (outfuncs/readfuncs)
dimoffon Jun 20, 2026
b54557e
regress: fix point double-load, spgist unlogged, regen geometry/spgist
dimoffon Jun 20, 2026
f4d9424
regress: regen 23 answer files for PG15/MPP cosmetic drift
dimoffon Jun 20, 2026
d6e6fc3
regress: regen join/aggregates/window cluster; fix flaky MPP window f…
dimoffon Jun 20, 2026
701235c
regress: regen 12 more answer files; fix lock per-segment multiplicity
dimoffon Jun 20, 2026
92d2ceb
regress: fix create_misc cascade; regen 13 GGDB-restriction answer files
dimoffon Jun 20, 2026
659b28b
regress: regen 5 more GGDB-restriction/behavior answer files
dimoffon Jun 20, 2026
4cca0cf
regress: regen with (recursive-CTE MPP plans) + create_table_like
dimoffon Jun 20, 2026
6c9aabe
Fix CLUSTER on a partitioned table dispatching the parent index to ch…
dimoffon Jun 20, 2026
ea46817
Fix 'type X is not composite' for whole-row ref to a function returni…
dimoffon Jun 20, 2026
e56610f
regress: fix cluster MPP residuals (per-segment ctid check + ptnowner…
dimoffon Jun 20, 2026
26e649f
regress: stabilize misc_functions flaky cost-tie join plan
dimoffon Jun 20, 2026
9b9ea2a
regress: stabilize join flaky cost-tie merge-join plan
dimoffon Jun 20, 2026
7780f76
regress: stabilize aggregates/portals/misc flaky output
dimoffon Jun 20, 2026
eedce9f
regress: fix tenk2 double-population (create_misc leftover); regen po…
dimoffon Jun 20, 2026
d15af16
psql: validate \dt/\di/\dv/... patterns for cross-db & over-qualified…
dimoffon Jun 20, 2026
93a1ffb
gpopt: port ORCA translator to PG15 node changes (Value split, SeqSca…
dimoffon Jun 20, 2026
4adab08
regress: regenerate 39 _optimizer.out for PG15 ORCA matrix
dimoffon Jun 20, 2026
a58a033
regress: stabilize ORCA-flaky tests at the root (CTAS random distribu…
dimoffon Jun 20, 2026
f2c92bc
regress: regen partition_prune/subselect/explain for EXPLAIN-ANALYZE …
dimoffon Jun 20, 2026
05595ea
Default recovery_prefetch=off to avoid the PG15 WAL-prefetcher assert
dimoffon Jun 20, 2026
fd3a89a
test: restore dropped convert_sourcefiles() + port isolation2 logtape…
dimoffon Jun 20, 2026
677b716
Fix CREATE EXTENSION of any extension with shell operators/types (PG1…
dimoffon Jun 21, 2026
fa46228
orafce: request shared memory from shmem_request_hook (PG15)
dimoffon Jun 21, 2026
543096f
Restore DTX checkpoint processing during crash recovery (PG15 merge)
dimoffon Jun 21, 2026
faa29fe
isolation2: regen export_distributed_snapshot for psql -c command-tag…
dimoffon Jun 21, 2026
e5fa297
Fix VACUUM FULL assert crash on append-optimized aux relations (PG15 …
dimoffon Jun 21, 2026
70339ad
Fix TRUNCATE leaving AO aux relations with invalid relfrozenxid (PG15…
dimoffon Jun 21, 2026
85822f6
isolation2: restore CREATE on public schema in setup (PG15)
dimoffon Jun 21, 2026
4614e40
isolation2: fix py3 bytes/str crash in pg_basebackup test helper
dimoffon Jun 21, 2026
f6e3c69
pg_basebackup: restore writing internal.auto.conf with target dbid (P…
dimoffon Jun 21, 2026
3345bd1
pg_basebackup: honor --force-overwrite for existing directories (PG15…
dimoffon Jun 21, 2026
e1fe95b
test: drop stale RequestNamedLWLockTranche mocks in sharedsnapshot un…
dimoffon Jun 21, 2026
1cfb7db
test: zero-init PGPROC in varsup xid_warn_limit unittest (PG15 SIGSEGV)
dimoffon Jun 21, 2026
49c75b4
test: adapt cdbappendonlyxlog unittest to PG15 xlogreader decode (com…
dimoffon Jun 21, 2026
caf5fd6
test: settle-waits for segwalrep in-order failover/recovery flakiness…
dimoffon Jun 21, 2026
3871c74
test: drop duplicate binary_coercible() from create_function_0 (PG15)
dimoffon Jun 21, 2026
c39c5b0
test: drop more PG15-merge duplicates breaking installcheck (test_enc…
dimoffon Jun 21, 2026
844a59d
fix(PG15): deparse gp_partition_template without pull_varnos crash
dimoffon Jun 22, 2026
065e4e4
fix(PG15): name EXPAND TABLE in alter_table_type_to_string
dimoffon Jun 22, 2026
5b8340b
fix(PG15): remove duplicate getTables() query in pg_dump
dimoffon Jun 22, 2026
e1947b9
fix(PG15): restore CREATE DATABASE failure cleanup + fault points
dimoffon Jun 22, 2026
565f490
fix(PG15): don't report temp-file stats during process exit
dimoffon Jun 22, 2026
b4ba4c9
fix(PG15): keep live_parts in sync when skipping external partitions
dimoffon Jun 22, 2026
40ad3da
fix(PG15): guard mppExecutorCleanup against a NULL executor state
dimoffon Jun 22, 2026
8730f81
fix(PG15): re-evaluate non-constant window frame offsets per row
dimoffon Jun 22, 2026
b70e009
fix(PG15): re-graft describeRoles GPDB columns; fix psql \du
dimoffon Jun 22, 2026
e3d1a02
fix(PG15): gp_owner_permission — grant public in new DB + reindex-as-…
dimoffon Jun 22, 2026
01e581e
fix(PG15): clone partition-inherited row triggers to sub-partitions
dimoffon Jun 22, 2026
1ccd8e4
test(PG15): pgstat_qd_tabstat — force stat flush instead of racing pg…
dimoffon Jun 22, 2026
fa7df36
fix(PG15): restore resource-queue stats via PGSTAT_KIND_RESQUEUE
dimoffon Jun 22, 2026
ba34f9c
test(PG15): gp_toolkit — grant CREATE on public in toolkit_testdb
dimoffon Jun 22, 2026
e0b745a
fix(PG15): don't re-clone FK/RI constraint triggers to sub-partitions
dimoffon Jun 22, 2026
6b27f72
test(PG15): regen triggers.out for GGDB grandchild trigger propagation
dimoffon Jun 22, 2026
a848eb3
test(PG15): regen 6 deterministic cosmetic answer-file drifts
dimoffon Jun 22, 2026
a5323eb
test(PG15): regen 3 more cosmetic drifts + fix pg_resetwal version
dimoffon Jun 22, 2026
9832412
test(PG15): rework freeze_aux_tables age classification for PG15 freeze
dimoffon Jun 22, 2026
7486ee2
test(PG15): uao_dml — force stat flush instead of racing pg_sleep
dimoffon Jun 22, 2026
2c6981b
test(PG15): misc — repair merge-damaged inheritance/postquel/tmp sect…
dimoffon Jun 22, 2026
ce76989
test(PG15): misc — re-graft order-by in hobbies_by_name for MPP deter…
dimoffon Jun 23, 2026
abc8963
fix(PG15): nodeAgg — use aggref->aggsplit (not aggstate) for combine-…
dimoffon Jun 23, 2026
4678778
fix(PG15): leaf_parts_analyzed — skip the root in the colstats loop too
dimoffon Jun 23, 2026
27e4171
test(PG15): gpcopy — accept upstream error for NEWLINE-mismatched COP…
dimoffon Jun 23, 2026
4f196f9
test(PG15): resgroup_name_convention — PG15 numeric-literal lexer err…
dimoffon Jun 23, 2026
db23af6
test(PG15): generated_optimizer.out — sync elog source line (14810->1…
dimoffon Jun 23, 2026
a79149f
test(PG15): portals_optimizer.out — add the new NO SCROLL cursor blocks
dimoffon Jun 23, 2026
fce7189
test(PG15): explain — strip work_mem memory accounting (varies by jit…
dimoffon Jun 23, 2026
1a5d8d3
fix(PG15): FTS handler crash during mirror promotion (ALTER SYSTEM ac…
dimoffon Jun 23, 2026
1b22b3a
test(resgroup): widen rg2_cpu_test cpu-usage tolerance 20±2 -> 20±5
dimoffon Jun 23, 2026
610d5f5
test(PG15): restore GENERATE_ROW_AND_COLUMN_FILES markers to source dirs
dimoffon Jun 23, 2026
83538a7
fix(PG15): pg_basebackup -E/--exclude dropped under new BASE_BACKUP s…
dimoffon Jun 23, 2026
069c9fe
fix(PG15): pg_basebackup --force-overwrite leaves stale tablespace sy…
dimoffon Jun 24, 2026
f18f6a3
fix(PG15): GUC flag collision — GUC_DISALLOW_USER_SET vs GUC_RUNTIME_…
dimoffon Jun 24, 2026
05a531c
fix(PG15): pg_basebackup --target-gp-dbid missing dbid in tablespace …
dimoffon Jun 24, 2026
06423bc
fix(PG15): WindowAgg run condition builds OpExpr with opno=0 (cache l…
dimoffon Jun 24, 2026
8c8a05d
fix(PG15): CREATE DATABASE (WAL_LOG) drops empty source pages, corrup…
dimoffon Jun 24, 2026
b35404c
test(PG15): regen guc.out runtime_computed result after GUC flag-coll…
dimoffon Jun 24, 2026
b81ed48
test(PG15): reconcile template1 visibility map at demo-cluster setup
dimoffon Jun 24, 2026
3c3eb2e
test(PG15): regen base .out for gpdist_legacy_opclasses, qp_correlate…
dimoffon Jun 24, 2026
fbdeb6a
test(PG15): regen gporca + minirepro answer files (plan-shape drift +…
dimoffon Jun 26, 2026
ffc81f2
test(PG15): add gp_pg15_merge_regress — PG14->PG15 feature + merge-fi…
dimoffon Jun 27, 2026
eb937c8
fix(PG15): clear leaked interrupt holdoff at error recovery (DROP/ALT…
dimoffon Jun 27, 2026
4d53997
fix(PG15): flatten JSON_TABLE scan mcxt hierarchy (nested-PLAN firstc…
dimoffon Jun 27, 2026
664fafd
fix(PG15): set partitioned-root reltuples when ANALYZE merges leaf stats
dimoffon Jun 27, 2026
db73cce
fix(PG15): restore --target-gp-dbid tablespace handling in pg_basebac…
dimoffon Jun 27, 2026
3865973
fix(PG15): enforce COPY ... HEADER MATCH in GPDB's COPY FROM parser
dimoffon Jun 28, 2026
55f2094
fix(PG15): grant CREATE on schema public in orafce test setup (dbms_p…
dimoffon Jun 28, 2026
02f02c7
fix(PG15): restore gp_file_fdw .source files to input/output dirs
dimoffon Jun 28, 2026
43e34e5
test(PG15): regen file_fdw.out for GGDB EXPLAIN output (cosmetic)
dimoffon Jun 28, 2026
b75f534
fix(PG15): use foreach_delete_current in SetupTCPInterconnect (array-…
dimoffon Jun 29, 2026
cab59e5
test(PG15): make two behave mgmt_utils steps robust to correct backen…
dimoffon Jun 29, 2026
b52b9c9
test(PG15): fix e.message AttributeError in mgmt_utils segment-info e…
dimoffon Jun 29, 2026
2f2eac1
test(PG15): add pg_dump MPP round-trip regression test
dimoffon Jun 29, 2026
1eed57a
test(PG15): regen answer files lagging committed fixes + benign plan …
dimoffon Jun 29, 2026
36c5675
fix(PG15): honor --force-overwrite for regular files in pg_basebackup…
dimoffon Jun 29, 2026
8196b32
test(PG15): fix 3 test-side regressions from PG15 memory/stats behavi…
dimoffon Jun 29, 2026
f0a5959
Merge PostgreSQL 16 (97d89101045) into GreengageDB
dimoffon Jul 3, 2026
412127a
PG16 regress: handle JOIN_RIGHT_ANTI, RTE_VOID, Memoize/IncrementalSort
dimoffon Jul 3, 2026
a14447e
PG16 regress: disable Memoize/IncrementalSort in MPP
dimoffon Jul 3, 2026
3fa7309
PG16 regress: fix crash cascade + dispatch/soft-error bug classes (op…
dimoffon Jul 3, 2026
d6a6abe
PG16 regress: fix RTE_VOID dispatch, VACUUM db-stats options, presort…
dimoffon Jul 3, 2026
c154d10
PG16 regress: dispatch assigned OIDs for ALTER GROUP ... ADD/DROP USER
dimoffon Jul 3, 2026
01cd056
PG16 regress: dispatch ColumnDef.storage_name (CREATE TABLE STORAGE c…
dimoffon Jul 3, 2026
ef55a52
PG16: restore GGDB planner GUC defaults dropped in guc.c->guc_tables.…
dimoffon Jul 4, 2026
9a51407
PG16: restore GGDB non-planner GUC defaults dropped in guc_tables.c r…
dimoffon Jul 4, 2026
096fe26
PG16: set IndexVacuumInfo.heaprel in AO index vacuum (fixes AO/AOCS V…
dimoffon Jul 4, 2026
69e8aca
PG16: port ORCA translator to RTEPermissionInfo + fix gporca -Wshadow…
dimoffon Jul 4, 2026
85737e4
PG16 opt=on: fix two ORCA-path RTEPermissionInfo/coldeflist bugs
dimoffon Jul 4, 2026
b81e18f
PG16 opt=on: regenerate 76 stale/missing _optimizer.out answer files
dimoffon Jul 4, 2026
a28e863
PG16 opt=on: green 3 more parallel_schedule tests (81->2 total)
dimoffon Jul 4, 2026
4ac3fb9
PG16 opt=on: stabilize aggregates v_pagg_test (order-by), 202/203
dimoffon Jul 4, 2026
51e3685
PG16 opt=on: regenerate 37 greenplum_schedule _optimizer.out (57->~23)
dimoffon Jul 4, 2026
89be71c
PG16: fix ATTACH PARTITION foreign-key OID-dispatch failure (constrai…
dimoffon Jul 4, 2026
205e764
PG16: regen 3 answer files for ruleutils unqualified-colref deparse d…
dimoffon Jul 5, 2026
a250325
PG16: restore AF_UNIX internal-connection handling (HAVE_UNIX_SOCKETS…
dimoffon Jul 5, 2026
b65f3d3
PG16: pg_regress -- decide test pass/fail from the diff, not psql exi…
dimoffon Jul 5, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
809 changes: 809 additions & 0 deletions .cirrus.yml

Large diffs are not rendered by default.

46 changes: 46 additions & 0 deletions .claude/skills/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Greengage project skills

Reusable skills distilled from the PostgreSQL major-version bump campaigns
(PG14 → claude-merge-2 / ai-bump-1, PG15 → claude-merge-3, PG16 → claude-merge-4).
Each is a Claude Code skill (`.claude/skills/<name>/SKILL.md`, auto-discovered by
Claude Code sessions in this repo) and doubles as developer documentation — a
human can just read it.

| Skill | Use it when |
|---|---|
| [greengage-pg-merge](greengage-pg-merge/SKILL.md) | Merging a pinned upstream PG major version: conflict clustering, semantic resolution with reference branches, phased bring-up, clean-merge traps. Per-version trap notes: [PG14](greengage-pg-merge/pg14-notes.md) · [PG15](greengage-pg-merge/pg15-notes.md) · [PG16](greengage-pg-merge/pg16-notes.md) |
| [greengage-internals](greengage-internals/SKILL.md) | Writing/reviewing a backend fix that must be MPP-correct — QD/QE dispatch, Motion/locus, DTX, FTS, AO tables, recurring GGDB bug classes. Full [GGDB-vs-vanilla-PostgreSQL map](greengage-internals/greengage-vs-postgres.md) |
| [greengage-build](greengage-build/SKILL.md) | Turning a C/C++ edit into the running binary in the campaign container — stale-binary, root-owned-artifact, and ORCA-relink traps |
| [greengage-regress-tests](greengage-regress-tests/SKILL.md) | Running one test or a whole suite against gpdemo, optimizer on/off, expected-file selection, false-pass traps. Suite inventory: [suites.md](greengage-regress-tests/suites.md) |
| [greengage-answer-file-regen](greengage-answer-file-regen/SKILL.md) | A failing test's diff looks cosmetic — regen (or better, init_file-mask) without burying a real bug |
| [greengage-cluster-ops](greengage-cluster-ops/SKILL.md) | gpdemo is down/degraded/wedged/out of disk, or needs creating, recreating, or stabilizing for HA tests |
| [greengage-debug](greengage-debug/SKILL.md) | A crash/assert/hang/wrong-result — repro, elog, fault injection, gdb. Log locations & signatures: [reading-logs.md](greengage-debug/reading-logs.md) |
| [greengage-ci-triage](greengage-ci-triage/SKILL.md) | A CI run is red — fetch artifacts, classify cosmetic vs real vs flaky across the shared-answer-file job matrix |

These complement `CLAUDE.md` (build/test/style basics).

## Hard rules

The non-negotiables every campaign re-learned the hard way; each skill has the detail.

1. **Never resolve a conflict by blindly taking ours/theirs.** Adopt the upstream
API shape, then re-graft the GGDB logic into it.
2. **Conflict markers gone ≠ resolved.** Run the area's verifier: `bison
-Wcounterexamples` for gram.y, `gen_node_support.pl` for the node layer,
`duplicate_oids` + initdb for catalogs, a caller sweep for changed signatures.
And files with NO markers can still be wrong (clean-merge traps).
3. **The success→error safety gate.** Never regenerate an answer file whose gpdiff
shows a committed result replaced by an ERROR — that is a real bug, not drift.
4. **All regress CI jobs share `expected/*.out`.** A regen that greens one job can
break another; regenerate only from the failing job's CI results tarball.
5. **Prefer an `init_file` mask over baking environment-specific output** (addresses,
ports, db names) into an expected file.
6. **Distrust binaries you didn't just build.** Verify `.c` → `.o` → installed
binary mtimes before concluding a fix "doesn't work" (stale-binary trap).
7. **No `make clean`** in campaign containers — it nukes the ORCA build.
8. **Before "fixing" an assert/PANIC, look for the test that validates it** — some
panics are designed behavior (e.g. mirror self-heal).
9. **`--use-existing` single-test runs are not authoritative.** Pollution and missing
setup fake failures; the fresh sequential installcheck run is the truth.
10. **Flaky failures rotate — don't regen them.** Confirm by rerun; a regen just
bakes one run's nondeterminism.
163 changes: 163 additions & 0 deletions .claude/skills/greengage-answer-file-regen/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
---
name: greengage-answer-file-regen
description: Regenerate regression answer files (expected/*.out, output/*.source) for cosmetic post-merge drift WITHOUT masking a real bug, or better, avoid the regen with an init_file/atmsort mask. Use when a failing test's diff is deparse/plan-shape/psql-format/error-message drift rather than a behavior change, when output differs between CI and local runs (baked addresses, db names), or when deciding between base .out and _optimizer.out. Includes the success->error safety gate, the CI-tarball source-of-truth rule, matchignore/matchsubs mechanics, .source-file handling, and verification.
---

# Regenerating answer files safely

After a PG major-version merge, many regression `.out` files drift cosmetically
(psql columns, deparse `AT TIME ZONE` → `timezone()`, error text, MPP plan
shapes/slice numbers, new upstream queries). These are regens, not bugs — but a
real bug can hide in the same pile (a query that returned data now ERRORs).
Never bulk-copy blindly.

**Decision order: (1) mask environment-varying text in `init_file`,
(2) fix the test (missing ORDER BY, leaked GUC), (3) regen the expected file.**

## The SAFETY GATE: success->error scan (the most important step)

The signature of a real bug hiding in a "cosmetic" pass is a removed result row /
`(N rows)` replaced by an added `+ERROR`. Scan for it **on the gpdiff
`regression.diffs`, NOT a raw `diff`/`git diff`**:

- `regression.diffs` already honors `--start_ignore/--end_ignore`, atmsort
row-sorting, and init_file masks, so its success->error hits are real. Raw
diffs over-report wildly (observed: 5326 raw lines → 16 real) and
FALSE-POSITIVE on ignore-block content and reorder context.
- **A clean re-run that reports `ok` is the definitive proof** there is no
non-ignored success->error.
- A `-ERROR` line in the diff may be a MOVE, not a removal — `grep -c` it on
both sides before treating it as a regression.
- **"No +ERROR" is NOT sufficient**: a changed DATA-ROW set with no error is
also a real bug (a doubled shared table produced exactly this). Per-test
inspection, never blind bulk `cp`.
- Bulk triage of many `_optimizer.out` drifts: per test, compare the ERROR-line
COUNT in `results/<t>.out` vs the known-green expected, after stripping
`(segN sliceN ip:port pid=N)` suffixes and digits (pid-differing duplicate
errors otherwise look "new"). delta=0 → plan-shape drift, safe; delta>0 →
investigate.
- **Never regen from a run that failed under memory pressure or a crashed
cluster** — it bakes `could not fork` / cascade errors into the expected.

Real bugs this gate caught (fixed, not regenned): multi-DQA+FILTER
`variable not found in subplan target list`; matview `DISTRIBUTED BY` aggregate;
mixed DISTINCT+regular aggregate wrong results (per-aggref aggsplit); doubled
tenk2/point tables from test-reorg leftovers.

## Prefer an init_file mask over baking environment text

`src/test/regress/init_file` is passed to gpdiff (`--gpd_init`, see
pg_regress.c) and applies to EVERY test; individual tests can embed their own
`-- start_matchsubs` blocks in the `.sql`. Two block types:

- **matchignore** (`-- start_matchignore`): bare `m/.../` patterns; a matching
line is dropped from BOTH result and expected. E.g. `m/^ Settings:.*/`
already ignores the EXPLAIN `Settings:` line — including jit GUCs, so do NOT
chase jit-on vs jit-off `Settings:` diffs.
- **matchsubs** (`-- start_matchsubs`): PAIRED `m/.../` + `s/.../.../` rules;
where the match hits, the substitution is applied to both sides.

**Worked example** — libpq (PG14+) prepends the server address to connection
errors (`connection to server at "<host>" (<addr>), port N failed: ...`);
regenerating would bake environment-specific addresses. Instead init_file
strips the prefix once (paired m// + s/// for the host and socket variants) —
tests then pass against the ORIGINAL expected files in every environment.

Per-test matchsub example: a plan that folds `now()::date` into
`Hash Key: '<date>'::date` rolls over daily — `sql/direct_dispatch.sql` masks
it with an embedded matchsub; the echoed block must appear in BOTH `<t>.out`
and `<t>_optimizer.out`.

atmsort built-ins you get for free: unordered-SELECT row sorting; stripping of
`(segN ... pid=N)` message suffixes (a default matchsub in atmsort.pm);
normalization of the EXPLAIN ANALYZE `Slice statistics:`/`Executor memory:`
trailer. Costed text EXPLAIN is canonicalized into a heavily-pruned plan tree
(explain.pm), so cost/row drift is a non-issue and plan-SHAPE drift means
editing the node-type WORDS in the expected file. `EXPLAIN (COSTS OFF)` output
is NOT processed — it compares verbatim and matchsubs apply to it normally
(that is how the direct_dispatch mask above works). atmsort does NOT normalize
psql column-header width/trailing spaces (beware editors that strip trailing
whitespace).

## Source of truth: the CI result tarball, not a local run

The CI matrix runs the SAME `expected/*.out` across four jobs — {JIT, non-JIT}
× {ORCA `optimizer=on`, planner `optimizer=off`} — so a regen that greens one
job can break another (fetching artifacts:
[greengage-ci-triage](../greengage-ci-triage/SKILL.md)). Hard rules:

- **Regenerate from the failing job's CI result tarball** (`*_results.tar` →
`.../results/<t>.out`), NOT a local gpdemo run — *unless* the output is fully
normalized (e.g. `explain`'s `explain_filter`). A local run bakes a fresh db
name into `current_database()` literals, `1 segment` vs `n segments`, local
addresses, local row order. Correctness check for a big reorder diff: the
sorted DATA-ROW SET must equal a known-good file's set (0 set diff).
- **A shared base `<t>.out` (no `<t>_optimizer.out`) is compared by ORCA jobs
too** (ORCA falls back to base). Regenerating it to planner output BREAKS the
ORCA jobs. If both optimizers need different output, SPLIT: `cp` the current
ORCA-passing base to `<t>_optimizer.out`, then regen the base from the
optimizer=off result. (Exception: a `--disable-orca` bring-up phase has only
one path, so base regens are safe until ORCA is built.)
- **`_optimizer.out` coverage is self-balancing — do NOT "backfill" it.** A
passing shared-base test needs none; a genuinely-diverging test is already
red. Real ORCA gaps are untested features, not missing files.
- **Never bake JIT-only output into a file a non-JIT job compares.** (In
practice the jit `Settings:` line is matchignored and the Executor-memory
trailer is atmsort-normalized; the one real jit artifact was a widened
`explain_filter` column, fixed by pinning `jit`, `jit_above_cost` and
`optimizer_jit_above_cost` to boot defaults in `sql/explain.sql`.)

## `.source`-based tests

Tests listed under `input/`/`output/` as `<t>.source` have their `sql/<t>.sql`
and `expected/<t>.out` GENERATED by pg_regress `convert_sourcefiles()`
(substituting `@abs_builddir@` etc.); the generated files are git-ignored (see
`expected/.gitignore`). To regen one, edit/copy into `output/<t>.source`
(gpsourcify.pl reverse-substitutes a results file back to tokens); never commit
a generated `.out`. These tests carry absolute paths/addresses — the least
locally-reproducible class; prefer init_file masks or CI results.

## Procedure

1. Prefer the CI result tarball (above). For a local regen run the test under
the right optimizer in a FRESH db with full setup (see
[greengage-regress-tests](../greengage-regress-tests/SKILL.md)); a polluted
`regression` db gives `already exists` cascades.
2. Scan `regression.diffs` for success->error; investigate every hit (inside a
`--start_ignore` block? error->error with only a line number change?
documented by a `-- FAIL` comment in the `.sql`?).
3. For confirmed-cosmetic tests, `cp results/<t>.out expected/<t>.out`.
4. Strip gpdiff-ignored noise the raw copy keeps:
`sed -i -E "/(NOTICE|HINT):.*DISTRIBUTED BY.*clause/d; /^Distributed by: \(/d"`.
5. **Verify**: re-run on a fresh db → `ok` / empty `regression.diffs`, under
BOTH optimizers if the file is shared.
6. `docker cp` lands files root-owned on the host — `chown` before editing.

## What NOT to regen

- **Flaky output.** Confirm determinism by running twice and diffing the two
`results/<t>.out`: the intersection of failures is regen-candidate, the
rotating remainder is flaky. Known flaky classes: EXPLAIN-ANALYZE per-segment
`actual rows` and `(never executed)` flutter (harden with an ignore/mask, do
not re-pin), index-scan row order without ORDER BY, AO segfile stats
(`truncate_gp`), CTAS-without-DISTRIBUTED-BY under ORCA (random policy →
per-segment counts flutter; fix the `.sql` with explicit DISTRIBUTED BY /
ORDER BY, then regen both files).
- **Pressure victims**: gpdemo is small; tests hitting `Out of memory` /
`failed to acquire resources` / fork failures have corrupt results.
- **Environment-specific text** (replication conninfo, data-dir paths,
addresses): mask it instead.
- **Coverage-defeating regens**: if the new plan LOSES the feature the test
exists to prove (e.g. a partition-elimination test whose new plan scans all
partitions), regenning silently deletes the coverage — hold and investigate.

## Inherent reorder noise

For data-returning tests the git diff is huge because unordered MPP results
come back in segment order; gpdiff sorts them, so the test is clean, but git
shows every moved row. Commit regens as isolated, clearly-labeled commits; the
success->error gate (not the visual diff) is the correctness check.

See also: [greengage-regress-tests](../greengage-regress-tests/SKILL.md),
[greengage-ci-triage](../greengage-ci-triage/SKILL.md),
[greengage-internals](../greengage-internals/SKILL.md).
Loading