From c4d3fd6d16ce3921dc6b2eb87e6e031274889dd0 Mon Sep 17 00:00:00 2001 From: Soumyadeep Chakraborty Date: Mon, 21 Nov 2022 09:20:45 -0800 Subject: [PATCH 1/5] ao/co: Smoke test - unique index in repeatable read Though no special code was written for unique indexes in the context of repeatable read transaction isolation, add a smoke test: * For added coverage * To illustrate how unique index checks cross transaction isolation boundaries. --- src/backend/access/appendonly/README.md | 12 ++++++++++++ src/test/isolation2/expected/ao_unique_index.out | 2 ++ src/test/isolation2/expected/aocs_unique_index.out | 2 ++ src/test/isolation2/sql/ao_unique_index.sql | 3 ++- src/test/isolation2/sql/aocs_unique_index.sql | 3 ++- 5 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/backend/access/appendonly/README.md b/src/backend/access/appendonly/README.md index 9ab4ad272b2..c6afe8a607e 100644 --- a/src/backend/access/appendonly/README.md +++ b/src/backend/access/appendonly/README.md @@ -248,3 +248,15 @@ index entries will still point to the segment being compacted. This will be the case up until the index entries are bulk deleted, but by then the new index entries along with new block directory rows would already have been written and would be able to answer uniqueness checks. + +Transaction isolation: Since uniqueness checks utilize the special dirty +snapshot, these checks can cross transaction isolation boundaries. For instance, +let us consider what will happen if we are in a repeatable read transaction and +we insert a key that was inserted by a concurrent transaction. Further let's say +that the repeatable read transaction's snapshot was taken before the concurrent +transaction started. This means that the repeatable read transaction won't be +able to see the conflicting key (for eg. with a SELECT). In spite of that +conflicts will still be detected. Depending on whether the concurrent +transaction committed or is still in progress, the repeatable read transaction +will raise a conflict or enter into xwait respectively. This behavior is table +AM agnostic. diff --git a/src/test/isolation2/expected/ao_unique_index.out b/src/test/isolation2/expected/ao_unique_index.out index d737b1feedc..dd19f04feb6 100644 --- a/src/test/isolation2/expected/ao_unique_index.out +++ b/src/test/isolation2/expected/ao_unique_index.out @@ -571,3 +571,5 @@ DETAIL: Key (a, b)=(1, 1) already exists. ERROR: duplicate key value violates unique constraint "a_b_unique" DROP TABLE unique_index_ao_row; DROP +RESET gp_appendonly_enable_unique_index; +RESET diff --git a/src/test/isolation2/expected/aocs_unique_index.out b/src/test/isolation2/expected/aocs_unique_index.out index 88a81e3220a..4e521260c53 100644 --- a/src/test/isolation2/expected/aocs_unique_index.out +++ b/src/test/isolation2/expected/aocs_unique_index.out @@ -571,3 +571,5 @@ DETAIL: Key (a, b)=(1, 1) already exists. ERROR: duplicate key value violates unique constraint "a_b_unique" DROP TABLE unique_index_ao_column; DROP +RESET gp_appendonly_enable_unique_index; +RESET diff --git a/src/test/isolation2/sql/ao_unique_index.sql b/src/test/isolation2/sql/ao_unique_index.sql index 55e1da5aae8..7b703d2907f 100644 --- a/src/test/isolation2/sql/ao_unique_index.sql +++ b/src/test/isolation2/sql/ao_unique_index.sql @@ -376,4 +376,5 @@ CREATE UNIQUE INDEX a_b_unique ON unique_index_ao_row(a,b); INSERT INTO unique_index_ao_row VALUES (1,2); -- should conflict INSERT INTO unique_index_ao_row VALUES (1,1); -DROP TABLE unique_index_ao_row; \ No newline at end of file +DROP TABLE unique_index_ao_row; +RESET gp_appendonly_enable_unique_index; diff --git a/src/test/isolation2/sql/aocs_unique_index.sql b/src/test/isolation2/sql/aocs_unique_index.sql index abe702de93e..78683428d98 100644 --- a/src/test/isolation2/sql/aocs_unique_index.sql +++ b/src/test/isolation2/sql/aocs_unique_index.sql @@ -376,4 +376,5 @@ CREATE UNIQUE INDEX a_b_unique ON unique_index_ao_column(a,b); INSERT INTO unique_index_ao_column VALUES (1,2); -- should conflict INSERT INTO unique_index_ao_column VALUES (1,1); -DROP TABLE unique_index_ao_column; \ No newline at end of file +DROP TABLE unique_index_ao_column; +RESET gp_appendonly_enable_unique_index; From b13dab1972262faf77d1dfc7db048e006ec8c696 Mon Sep 17 00:00:00 2001 From: Soumyadeep Chakraborty Date: Mon, 21 Nov 2022 09:30:18 -0800 Subject: [PATCH 2/5] ao/co: Add smoke test for partial unique indexes We don't have to do anything special for partial indexes. Keys not satisfying the partial index predicate are never inserted into the index, and hence there are no uniqueness checks triggered (see ExecInsertIndexTuples()). Also during partial unique index builds, keys that don't satisfy the partial index predicate are never inserted into the index (see *_index_build_range_scan()). Add smoke tests all the same: * For added coverage * For illustrative purposes --- src/backend/access/appendonly/README.md | 7 +++++++ .../regress/input/uao_dml/ao_unique_index_build.source | 1 + .../regress/output/uao_dml/ao_unique_index_build.source | 1 + 3 files changed, 9 insertions(+) diff --git a/src/backend/access/appendonly/README.md b/src/backend/access/appendonly/README.md index c6afe8a607e..ab677ad849c 100644 --- a/src/backend/access/appendonly/README.md +++ b/src/backend/access/appendonly/README.md @@ -260,3 +260,10 @@ conflicts will still be detected. Depending on whether the concurrent transaction committed or is still in progress, the repeatable read transaction will raise a conflict or enter into xwait respectively. This behavior is table AM agnostic. + +Partial unique indexes: We don't have to do anything special for partial indexes. +Keys not satisfying the partial index predicate are never inserted into the +index, and hence there are no uniqueness checks triggered (see +ExecInsertIndexTuples()). Also during partial unique index builds, keys that +don't satisfy the partial index predicate are never inserted into the index +(see *_index_build_range_scan()). diff --git a/src/test/regress/input/uao_dml/ao_unique_index_build.source b/src/test/regress/input/uao_dml/ao_unique_index_build.source index 30ee292aa00..96c0f96df05 100644 --- a/src/test/regress/input/uao_dml/ao_unique_index_build.source +++ b/src/test/regress/input/uao_dml/ao_unique_index_build.source @@ -81,6 +81,7 @@ SELECT * FROM unique_index_build_@amname@ WHERE i = 6; DROP TABLE unique_index_build_@amname@; +RESET gp_appendonly_enable_unique_index; RESET default_table_access_method; RESET enable_seqscan; RESET optimizer; diff --git a/src/test/regress/output/uao_dml/ao_unique_index_build.source b/src/test/regress/output/uao_dml/ao_unique_index_build.source index 734d4903c0f..add4e237aaf 100644 --- a/src/test/regress/output/uao_dml/ao_unique_index_build.source +++ b/src/test/regress/output/uao_dml/ao_unique_index_build.source @@ -147,6 +147,7 @@ SELECT * FROM unique_index_build_@amname@ WHERE i = 6; (3 rows) DROP TABLE unique_index_build_@amname@; +RESET gp_appendonly_enable_unique_index; RESET default_table_access_method; RESET enable_seqscan; RESET optimizer; From 936183d248cc3a9a9fea22c84016d01a39ec6b39 Mon Sep 17 00:00:00 2001 From: Soumyadeep Chakraborty Date: Mon, 21 Nov 2022 09:24:16 -0800 Subject: [PATCH 3/5] Allow SET AM from heap to AO with unique indexes Now that unique indexes are supported on AO tables, allow ALTER TABLE SET ACCESS METHOD TO ao_row|ao_column, on heap tables bearing unique indexes. --- src/backend/commands/tablecmds.c | 13 ---- .../regress/expected/alter_table_set_am.out | 64 ++++++++++--------- src/test/regress/sql/alter_table_set_am.sql | 19 ++---- 3 files changed, 42 insertions(+), 54 deletions(-) diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index f3102687cae..3e82ea82e17 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -16053,19 +16053,6 @@ ATPrepSetAccessMethod(AlteredTableInfo *tab, Relation rel, const char *amname) if (rel->rd_rel->relam == amoid) return; - /* - * Since we don't support unique indexes for AO/AOCO tables, ban - * heap->AO/AOCO in case the heap table has a unique index. - */ - if (rel->rd_rel->relam == HEAP_TABLE_AM_OID && - (amoid == AO_ROW_TABLE_AM_OID || amoid == AO_COLUMN_TABLE_AM_OID)) - { - if (relationHasUniqueIndex(rel)) - ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("append-only tables do not support unique indexes"), - errdetail("heap table \"%s\" being altered contains unique index", RelationGetRelationName(rel)))); - } - /* Save info for Phase 3 to do the real work */ tab->rewrite |= AT_REWRITE_ACCESS_METHOD; tab->newAccessMethod = amoid; diff --git a/src/test/regress/expected/alter_table_set_am.out b/src/test/regress/expected/alter_table_set_am.out index f1657176122..a894e7b909f 100644 --- a/src/test/regress/expected/alter_table_set_am.out +++ b/src/test/regress/expected/alter_table_set_am.out @@ -1,4 +1,5 @@ -- Check changing table access method +\set HIDE_TABLEAM off -- Scenario 1: Changing to the same AM: it should have no effect but -- make sure it doesn't rewrite table or blow up existing reloptions: CREATE TABLE sameam_heap(a int, b int) WITH (fillfactor=70) DISTRIBUTED BY (a); @@ -68,41 +69,46 @@ CREATE TEMP TABLE relfilebeforeao AS WHERE relname in ('heap2ao', 'heap2ao2', 'heapi') ORDER BY segid; NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column(s) named 'segid' as the Greenplum Database data distribution key for this table. HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. --- Altering a heap table with a unique index to AO should error out --- as unique indexes aren't supported on AO tables -ALTER TABLE heap2ao2 SET ACCESS METHOD ao_row; -ERROR: append-only tables do not support unique indexes -DETAIL: heap table "heap2ao2" being altered contains unique index -ALTER TABLE heap2ao2 DROP CONSTRAINT unique_constraint; -- Set default storage options for the table to inherit from SET gp_default_storage_options = 'blocksize=65536, compresstype=zlib, compresslevel=5, checksum=true'; --- Alter table heap to AO should work +-- Alter table heap to AO should work, even if heap table has unique indexes. ALTER TABLE heap2ao SET ACCESS METHOD ao_row; ALTER TABLE heap2ao2 SET WITH (appendoptimized=true); -- The altered tables should have AO AM -SELECT c.relname, a.amname FROM pg_class c JOIN pg_am a ON c.relam = a.oid WHERE c.relname LIKE 'heap2ao%'; - relname | amname -----------+-------- - heap2ao | ao_row - heap2ao2 | ao_row -(2 rows) - -- The altered tables should inherit storage options from gp_default_storage_options --- And, the original heap reloptions are gone (in this case, 'fillfactor'). -SELECT blocksize,compresslevel,checksum,compresstype,columnstore -FROM pg_appendonly WHERE relid in ('heap2ao'::regclass::oid, 'heap2ao2'::regclass::oid); - blocksize | compresslevel | checksum | compresstype | columnstore ------------+---------------+----------+--------------+------------- - 65536 | 5 | t | zlib | f - 65536 | 5 | t | zlib | f -(2 rows) - -SELECT reloptions from pg_class where relname in ('heap2ao', 'heap2ao2'); - reloptions ------------------------------------ - {blocksize=65536,compresslevel=5} - {blocksize=65536,compresslevel=5} -(2 rows) +-- And, the original heap reloptions are gone (in this case, 'fillfactor'). +-- Also, equivalent indexes have been created +\d+ heap2ao + Table "public.heap2ao" + Column | Type | Collation | Nullable | Default | Storage | Stats target | Description +--------+---------+-----------+----------+---------+---------+--------------+------------- + a | integer | | | | plain | | + b | integer | | | | plain | | +Compression Type: zlib +Compression Level: 5 +Block Size: 65536 +Checksum: t +Indexes: + "heapi" btree (b) +Distributed by: (a) +Access method: ao_row +Options: blocksize=65536, compresslevel=5 + +\d+ heap2ao2 + Table "public.heap2ao2" + Column | Type | Collation | Nullable | Default | Storage | Stats target | Description +--------+---------+-----------+----------+---------+---------+--------------+------------- + a | integer | | | | plain | | + b | integer | | | | plain | | +Compression Type: zlib +Compression Level: 5 +Block Size: 65536 +Checksum: t +Indexes: + "unique_constraint" UNIQUE CONSTRAINT, btree (a) +Distributed by: (a) +Access method: ao_row +Options: blocksize=65536, compresslevel=5 -- Check data is intact SELECT * FROM heap2ao; diff --git a/src/test/regress/sql/alter_table_set_am.sql b/src/test/regress/sql/alter_table_set_am.sql index f3c1a235c9d..47d35132887 100644 --- a/src/test/regress/sql/alter_table_set_am.sql +++ b/src/test/regress/sql/alter_table_set_am.sql @@ -1,5 +1,7 @@ -- Check changing table access method +\set HIDE_TABLEAM off + -- Scenario 1: Changing to the same AM: it should have no effect but -- make sure it doesn't rewrite table or blow up existing reloptions: CREATE TABLE sameam_heap(a int, b int) WITH (fillfactor=70) DISTRIBUTED BY (a); @@ -52,26 +54,19 @@ CREATE TEMP TABLE relfilebeforeao AS UNION SELECT gp_segment_id segid, relfilenode FROM gp_dist_random('pg_class') WHERE relname in ('heap2ao', 'heap2ao2', 'heapi') ORDER BY segid; --- Altering a heap table with a unique index to AO should error out --- as unique indexes aren't supported on AO tables -ALTER TABLE heap2ao2 SET ACCESS METHOD ao_row; -ALTER TABLE heap2ao2 DROP CONSTRAINT unique_constraint; - -- Set default storage options for the table to inherit from SET gp_default_storage_options = 'blocksize=65536, compresstype=zlib, compresslevel=5, checksum=true'; --- Alter table heap to AO should work +-- Alter table heap to AO should work, even if heap table has unique indexes. ALTER TABLE heap2ao SET ACCESS METHOD ao_row; ALTER TABLE heap2ao2 SET WITH (appendoptimized=true); -- The altered tables should have AO AM -SELECT c.relname, a.amname FROM pg_class c JOIN pg_am a ON c.relam = a.oid WHERE c.relname LIKE 'heap2ao%'; - -- The altered tables should inherit storage options from gp_default_storage_options --- And, the original heap reloptions are gone (in this case, 'fillfactor'). -SELECT blocksize,compresslevel,checksum,compresstype,columnstore -FROM pg_appendonly WHERE relid in ('heap2ao'::regclass::oid, 'heap2ao2'::regclass::oid); -SELECT reloptions from pg_class where relname in ('heap2ao', 'heap2ao2'); +-- And, the original heap reloptions are gone (in this case, 'fillfactor'). +-- Also, equivalent indexes have been created +\d+ heap2ao +\d+ heap2ao2 -- Check data is intact SELECT * FROM heap2ao; From f816e4c2ebbe721c5022b766c19c4b69b2d09c8e Mon Sep 17 00:00:00 2001 From: Soumyadeep Chakraborty Date: Fri, 30 Dec 2022 13:06:43 -0800 Subject: [PATCH 4/5] ao: Scan progress reporting for CREATE INDEX This enables reporting for the table scan phase of index builds on AO tables. This directly affects: (1) pg_stat_progress_create_index.blocks_total (2) pg_stat_progress_create_index.blocks_done Sample: Connect in utility mode to a segment, while CREATE INDEX is running on an AO table: postgres=# select pid, command, phase, blocks_total, blocks_done from pg_stat_progress_create_index; pid | command | phase | blocks_total | blocks_done --------+--------------+--------------------------------+--------------+------------- 633034 | CREATE INDEX | building index: scanning table | 54993 | 4412 (1 row) This commit introduces: (1) Accounting in AppendOnlyScanDescData to track the total number of bytes read across all segment files. It is updated whenever a new block is read. If the block is compressed, its compressed length is added (uncompressed length otherwise). (2) Reporting code in appendonly_index_build_range_scan() to report in increments of BLCKSZ, the number of blocks scanned so far. The total number of blocks to be scanned is also published up front and is determined by summing the compressed eof values of all segfiles. (3) Marks RelationGuessNumberOfBlocksFromSize() as inline, since it is now being called in a much hotter code path. Note: We currently only support reporting for non-concurrent index builds and serial builds. --- src/backend/access/appendonly/appendonlyam.c | 7 +++++++ .../access/appendonly/appendonlyam_handler.c | 20 +++++++++++++++---- src/backend/cdb/cdbappendonlystorageread.c | 3 +++ src/backend/storage/buffer/bufmgr.c | 13 ------------ src/include/cdb/cdbappendonlyam.h | 20 +++++++++++++++++++ src/include/storage/bufmgr.h | 13 +++++++++++- src/test/isolation2/isolation2_schedule | 2 ++ 7 files changed, 60 insertions(+), 18 deletions(-) diff --git a/src/backend/access/appendonly/appendonlyam.c b/src/backend/access/appendonly/appendonlyam.c index 5fdfe51f3e8..e779169c30a 100755 --- a/src/backend/access/appendonly/appendonlyam.c +++ b/src/backend/access/appendonly/appendonlyam.c @@ -105,6 +105,8 @@ static void appendonly_insert_finish_guts(AppendOnlyInsertDesc aoInsertDesc); /* Hook for plugins to get control in appendonly_delete() */ appendonly_delete_hook_type appendonly_delete_hook = NULL; +static void AppendOnlyScanDesc_UpdateTotalBytesRead( + AppendOnlyScanDesc scan); /* ---------------- * initscan - scan code common to appendonly_beginscan and appendonly_rescan @@ -1251,6 +1253,8 @@ getNextBlock(AppendOnlyScanDesc scan) AppendOnlyExecutorReadBlock_GetContents( &scan->executorReadBlock); + AppendOnlyScanDesc_UpdateTotalBytesRead(scan); + return true; } @@ -1583,6 +1587,9 @@ appendonly_beginrangescan_internal(Relation relation, AccessShareLock, appendOnlyMetaDataSnapshot); } + + scan->totalBytesRead = 0; + return scan; } diff --git a/src/backend/access/appendonly/appendonlyam_handler.c b/src/backend/access/appendonly/appendonlyam_handler.c index ba3a8ebcc3b..08787012b03 100644 --- a/src/backend/access/appendonly/appendonlyam_handler.c +++ b/src/backend/access/appendonly/appendonlyam_handler.c @@ -36,6 +36,7 @@ #include "catalog/storage_xlog.h" #include "cdb/cdbappendonlyam.h" #include "cdb/cdbvars.h" +#include "commands/progress.h" #include "commands/vacuum.h" #include "commands/progress.h" #include "executor/executor.h" @@ -1572,7 +1573,7 @@ appendonly_index_build_range_scan(Relation heapRelation, FileSegInfo **seginfo = NULL; int segfile_count; int64 total_blockcount = 0; - AppendOnlyScanDesc hscan; + int64 previous_blkno = -1; /* * sanity checks @@ -1720,10 +1721,22 @@ appendonly_index_build_range_scan(Relation heapRelation, (numblocks != InvalidBlockNumber && ItemPointerGetBlockNumber(&slot->tts_tid) >= numblocks)) continue; + /* Report scan progress, if asked to. */ if (progress) { - hscan = (AppendOnlyScanDesc) &aoscan->rs_base; - pgstat_progress_update_param(PROGRESS_SCAN_BLOCKS_DONE, hscan->rs_nblocks); + int64 current_blkno = + RelationGuessNumberOfBlocksFromSize(aoscan->totalBytesRead); + + /* XXX: How can we report for builds with parallel scans? */ + Assert(!aoscan->rs_base.rs_parallel); + + /* As soon as a new block starts, report it as scanned */ + if (current_blkno != previous_blkno) + { + pgstat_progress_update_param(PROGRESS_SCAN_BLOCKS_DONE, + current_blkno); + previous_blkno = current_blkno; + } } aoTupleId = (AOTupleId *) &slot->tts_tid; @@ -1820,7 +1833,6 @@ appendonly_index_validate_scan(Relation heapRelation, ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("index validate scan - feature not supported on appendoptimized relations"))); - } /* ------------------------------------------------------------------------ diff --git a/src/backend/cdb/cdbappendonlystorageread.c b/src/backend/cdb/cdbappendonlystorageread.c index 05a243fe756..19fe30f34f9 100755 --- a/src/backend/cdb/cdbappendonlystorageread.c +++ b/src/backend/cdb/cdbappendonlystorageread.c @@ -27,6 +27,7 @@ #include "cdb/cdbappendonlystorageformat.h" #include "cdb/cdbappendonlystorageread.h" #include "storage/gp_compress.h" +#include "utils/faultinjector.h" #include "utils/guc.h" @@ -1011,6 +1012,8 @@ AppendOnlyStorageRead_ReadNextBlock(AppendOnlyStorageRead *storageRead) /* UNDONE: Finish the read for the information only header. */ } + SIMPLE_FAULT_INJECTOR("AppendOnlyStorageRead_ReadNextBlock_success"); + return true; } diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index 4b1c43c4506..e93d8501d00 100644 --- a/src/backend/storage/buffer/bufmgr.c +++ b/src/backend/storage/buffer/bufmgr.c @@ -3168,19 +3168,6 @@ RelationGetNumberOfBlocksInFork(Relation relation, ForkNumber forkNum) return 0; /* keep compiler quiet */ } -/* - * GPDB: it is possible to need to calculate the number of blocks from the table - * size. An example use case is when we are the dispatcher and we need to - * acquire the number of blocks from all segments. - * - * Use the same calculation that RelationGetNumberOfBlocksInFork is using. - */ -BlockNumber -RelationGuessNumberOfBlocksFromSize(uint64 szbytes) -{ - return (szbytes + (BLCKSZ - 1)) / BLCKSZ; -} - /* * BufferIsPermanent * Determines whether a buffer will potentially still be around after diff --git a/src/include/cdb/cdbappendonlyam.h b/src/include/cdb/cdbappendonlyam.h index ea93e9bdf87..2287abc21cb 100644 --- a/src/include/cdb/cdbappendonlyam.h +++ b/src/include/cdb/cdbappendonlyam.h @@ -259,6 +259,11 @@ typedef struct AppendOnlyScanDescData /* used in predicate pushdown */ ExprContext *aos_pushdown_econtext; ExprState *aos_pushdown_qual; + /* + * The total number of bytes read, compressed, across all segment files, so + * far. This is used for scan progress reporting. + */ + int64 totalBytesRead; } AppendOnlyScanDescData; @@ -494,5 +499,20 @@ extern bool AppendOnlyExecutorReadBlock_ScanNextTuple(AppendOnlyExecutorReadBloc TupleTableSlot *slot); extern void AppendOnlyExecutorReadBlock_GetContents(AppendOnlyExecutorReadBlock *executorReadBlock); +/* + * Update total bytes read for the entire scan. If the block was compressed, + * update it with the compressed length. If the block was not compressed, update + * it with the uncompressed length. + */ +static inline void +AppendOnlyScanDesc_UpdateTotalBytesRead(AppendOnlyScanDesc scan) +{ + Assert(scan->storageRead.isActive); + + if (scan->storageRead.current.isCompressed) + scan->totalBytesRead += scan->storageRead.current.compressedLen; + else + scan->totalBytesRead += scan->storageRead.current.uncompressedLen; +} #endif /* CDBAPPENDONLYAM_H */ diff --git a/src/include/storage/bufmgr.h b/src/include/storage/bufmgr.h index 129bdb8d61b..9f4f0a4f0e7 100644 --- a/src/include/storage/bufmgr.h +++ b/src/include/storage/bufmgr.h @@ -217,7 +217,18 @@ extern void DropRelFileNodeBuffers(struct SMgrRelationData *smgr_reln, ForkNumbe extern void DropRelFileNodesAllBuffers(struct SMgrRelationData **smgr_reln, int nnodes); extern void DropDatabaseBuffers(Oid dbid); -extern BlockNumber RelationGuessNumberOfBlocksFromSize(uint64 szbytes); +/* + * GPDB: it is possible to need to calculate the number of blocks from the table + * size. An example use case is when we are the dispatcher and we need to + * acquire the number of blocks from all segments. + * + * Use the same calculation that RelationGetNumberOfBlocksInFork is using. + */ +static inline BlockNumber +RelationGuessNumberOfBlocksFromSize(uint64 szbytes) +{ + return (szbytes + (BLCKSZ - 1)) / BLCKSZ; +} #define RelationGetNumberOfBlocks(reln) \ RelationGetNumberOfBlocksInFork(reln, MAIN_FORKNUM) diff --git a/src/test/isolation2/isolation2_schedule b/src/test/isolation2/isolation2_schedule index a4336a24f47..46de65c418b 100644 --- a/src/test/isolation2/isolation2_schedule +++ b/src/test/isolation2/isolation2_schedule @@ -226,6 +226,8 @@ test: idle_gang_cleaner # test idle_in_transaction_session_timeout test: write_gang_idle_in_transaction_session_timeout +test: ao_index_build_progress + # Tests for FTS test: fts_errors test: segwalrep/replication_keeps_crash From c407872d4017ce88e99b029ce793a7bc4c99e1a1 Mon Sep 17 00:00:00 2001 From: reshke Date: Tue, 28 Jan 2025 16:33:32 +0000 Subject: [PATCH 5/5] Cherry-pick fix: remove gp_appendonly_enable_unique_index GUC --- .../isolation2/expected/ao_unique_index.out | 1 - .../isolation2/expected/aocs_unique_index.out | 1 - src/test/isolation2/sql/ao_unique_index.sql | 1 - src/test/isolation2/sql/aocs_unique_index.sql | 1 - .../uao_dml/ao_unique_index_build.source | 1 - .../uao_dml/ao_unique_index_build.source | 1 - src/test/regress/regression.diffs | 361 ++++++++++++++ src/test/regress/regression.out | 462 ++++++++++++++++++ 8 files changed, 823 insertions(+), 6 deletions(-) create mode 100644 src/test/regress/regression.diffs create mode 100644 src/test/regress/regression.out diff --git a/src/test/isolation2/expected/ao_unique_index.out b/src/test/isolation2/expected/ao_unique_index.out index dd19f04feb6..e4e71850f10 100644 --- a/src/test/isolation2/expected/ao_unique_index.out +++ b/src/test/isolation2/expected/ao_unique_index.out @@ -571,5 +571,4 @@ DETAIL: Key (a, b)=(1, 1) already exists. ERROR: duplicate key value violates unique constraint "a_b_unique" DROP TABLE unique_index_ao_row; DROP -RESET gp_appendonly_enable_unique_index; RESET diff --git a/src/test/isolation2/expected/aocs_unique_index.out b/src/test/isolation2/expected/aocs_unique_index.out index 4e521260c53..af668e72683 100644 --- a/src/test/isolation2/expected/aocs_unique_index.out +++ b/src/test/isolation2/expected/aocs_unique_index.out @@ -571,5 +571,4 @@ DETAIL: Key (a, b)=(1, 1) already exists. ERROR: duplicate key value violates unique constraint "a_b_unique" DROP TABLE unique_index_ao_column; DROP -RESET gp_appendonly_enable_unique_index; RESET diff --git a/src/test/isolation2/sql/ao_unique_index.sql b/src/test/isolation2/sql/ao_unique_index.sql index 7b703d2907f..2f4d9742afe 100644 --- a/src/test/isolation2/sql/ao_unique_index.sql +++ b/src/test/isolation2/sql/ao_unique_index.sql @@ -377,4 +377,3 @@ INSERT INTO unique_index_ao_row VALUES (1,2); -- should conflict INSERT INTO unique_index_ao_row VALUES (1,1); DROP TABLE unique_index_ao_row; -RESET gp_appendonly_enable_unique_index; diff --git a/src/test/isolation2/sql/aocs_unique_index.sql b/src/test/isolation2/sql/aocs_unique_index.sql index 78683428d98..fc61d6b4da2 100644 --- a/src/test/isolation2/sql/aocs_unique_index.sql +++ b/src/test/isolation2/sql/aocs_unique_index.sql @@ -377,4 +377,3 @@ INSERT INTO unique_index_ao_column VALUES (1,2); -- should conflict INSERT INTO unique_index_ao_column VALUES (1,1); DROP TABLE unique_index_ao_column; -RESET gp_appendonly_enable_unique_index; diff --git a/src/test/regress/input/uao_dml/ao_unique_index_build.source b/src/test/regress/input/uao_dml/ao_unique_index_build.source index 96c0f96df05..30ee292aa00 100644 --- a/src/test/regress/input/uao_dml/ao_unique_index_build.source +++ b/src/test/regress/input/uao_dml/ao_unique_index_build.source @@ -81,7 +81,6 @@ SELECT * FROM unique_index_build_@amname@ WHERE i = 6; DROP TABLE unique_index_build_@amname@; -RESET gp_appendonly_enable_unique_index; RESET default_table_access_method; RESET enable_seqscan; RESET optimizer; diff --git a/src/test/regress/output/uao_dml/ao_unique_index_build.source b/src/test/regress/output/uao_dml/ao_unique_index_build.source index add4e237aaf..734d4903c0f 100644 --- a/src/test/regress/output/uao_dml/ao_unique_index_build.source +++ b/src/test/regress/output/uao_dml/ao_unique_index_build.source @@ -147,7 +147,6 @@ SELECT * FROM unique_index_build_@amname@ WHERE i = 6; (3 rows) DROP TABLE unique_index_build_@amname@; -RESET gp_appendonly_enable_unique_index; RESET default_table_access_method; RESET enable_seqscan; RESET optimizer; diff --git a/src/test/regress/regression.diffs b/src/test/regress/regression.diffs new file mode 100644 index 00000000000..3293239c6eb --- /dev/null +++ b/src/test/regress/regression.diffs @@ -0,0 +1,361 @@ +diff -I HINT: -I CONTEXT: -I GP_IGNORE: -U3 /home/reshke/cloudberrydb/src/test/regress/expected/explain.out /home/reshke/cloudberrydb/src/test/regress/results/explain.out +--- /home/reshke/cloudberrydb/src/test/regress/expected/explain.out 2025-01-28 16:14:24.811328585 +0000 ++++ /home/reshke/cloudberrydb/src/test/regress/results/explain.out 2025-01-28 16:14:24.833329164 +0000 +@@ -395,7 +395,6 @@ + }, + + "Settings": { + + "Optimizer": "Postgres query optimizer", + +- "optimizer": "off", + + "enable_parallel": "off", + + "parallel_setup_cost": "0", + + "parallel_tuple_cost": "0", + +diff -I HINT: -I CONTEXT: -I GP_IGNORE: -U3 /home/reshke/cloudberrydb/src/test/regress/expected/tag.out /home/reshke/cloudberrydb/src/test/regress/results/tag.out +--- /home/reshke/cloudberrydb/src/test/regress/expected/tag.out 2025-01-28 16:15:04.128363594 +0000 ++++ /home/reshke/cloudberrydb/src/test/regress/results/tag.out 2025-01-28 16:15:04.169364673 +0000 +@@ -211,21 +211,22 @@ + tagname | tagowner | allowed_values + ---------+----------+---------------- + tag1 | tag_user | +- tag2 | gpadmin | +- tag3 | gpadmin | {123} +- tag4 | gpadmin | {123,456," "} ++ tag2 | reshke | ++ tag3 | reshke | {123} ++ tag4 | reshke | {123,456," "} + (4 rows) + + ALTER TAG tag1 OWNER TO gpadmin; ++ERROR: role "gpadmin" does not exist + SELECT tagname, rolname AS tagowner, allowed_values FROM pg_tag, pg_authid + WHERE pg_tag.tagowner = pg_authid.oid + ORDER BY 1; + tagname | tagowner | allowed_values + ---------+----------+---------------- +- tag1 | gpadmin | +- tag2 | gpadmin | +- tag3 | gpadmin | {123} +- tag4 | gpadmin | {123,456," "} ++ tag1 | tag_user | ++ tag2 | reshke | ++ tag3 | reshke | {123} ++ tag4 | reshke | {123,456," "} + (4 rows) + + \c other_db +@@ -234,10 +235,10 @@ + ORDER BY 1; + tagname | tagowner | allowed_values + ---------+----------+---------------- +- tag1 | gpadmin | +- tag2 | gpadmin | +- tag3 | gpadmin | {123} +- tag4 | gpadmin | {123,456," "} ++ tag1 | tag_user | ++ tag2 | reshke | ++ tag3 | reshke | {123} ++ tag4 | reshke | {123,456," "} + (4 rows) + + \c postgres +@@ -248,7 +249,7 @@ + SELECT tagname, tagowner, allowed_values FROM pg_tag ORDER BY 1; + tagname | tagowner | allowed_values + ---------+----------+---------------- +- tag1 | 10 | ++ tag1 | 37847 | + tag2 | 10 | + tag3 | 10 | + tag4 | 10 | {123,456," "} +@@ -264,7 +265,7 @@ + SELECT tagname, tagowner, allowed_values FROM pg_tag ORDER BY 1; + tagname | tagowner | allowed_values + ---------+----------+---------------- +- tag1 | 10 | ++ tag1 | 37847 | + tag2 | 10 | + tag3 | 10 | + tag4 | 10 | {123,456," "} +@@ -333,7 +334,7 @@ + SELECT tagname, tagowner, allowed_values FROM pg_tag ORDER BY 1; + tagname | tagowner | allowed_values + ---------+----------+-------------------------------- +- tag1 | 10 | {val1,val2,val3,val4,val5," "} ++ tag1 | 37847 | {val1,val2,val3,val4,val5," "} + tag2 | 10 | + tag3 | 10 | + tag4 | 10 | {123,456," "} +@@ -349,7 +350,7 @@ + SELECT tagname, tagowner, allowed_values FROM pg_tag ORDER BY 1; + tagname | tagowner | allowed_values + ---------+----------+-------------------------------- +- tag1 | 10 | {val1,val2,val3,val4,val5," "} ++ tag1 | 37847 | {val1,val2,val3,val4,val5," "} + tag2 | 10 | + tag3 | 10 | + tag4 | 10 | {123,456," "} +@@ -416,7 +417,7 @@ + SELECT tagname, tagowner, allowed_values FROM pg_tag ORDER BY 1; + tagname | tagowner | allowed_values + ---------+----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +- tag1 | 10 | {val1,val2,val3,val4,val5," "} ++ tag1 | 37847 | {val1,val2,val3,val4,val5," "} + tag2 | 10 | {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300} + tag3 | 10 | {dadkqjefpqfqfqe4l123j9i1snkqenp3412n4jnflqjenfaddpiqepj21304i12;kfnqpqnepfqefqwef} + tag4 | 10 | {123,456," ",""} +@@ -432,7 +433,7 @@ + SELECT tagname, tagowner, allowed_values FROM pg_tag ORDER BY 1; + tagname | tagowner | allowed_values + ---------+----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +- tag1 | 10 | {val1,val2,val3,val4,val5," "} ++ tag1 | 37847 | {val1,val2,val3,val4,val5," "} + tag2 | 10 | {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300} + tag3 | 10 | {dadkqjefpqfqfqe4l123j9i1snkqenp3412n4jnflqjenfaddpiqepj21304i12;kfnqpqnepfqefqwef} + tag4 | 10 | {123,456," ",""} +@@ -479,7 +480,7 @@ + SELECT tagname, tagowner, allowed_values FROM pg_tag ORDER BY 1; + tagname | tagowner | allowed_values + ---------+----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +- tag1 | 10 | ++ tag1 | 37847 | + tag2 | 10 | {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300} + tag3 | 10 | {dadkqjefpqfqfqe4l123j9i1snkqenp3412n4jnflqjenfaddpiqepj21304i12;kfnqpqnepfqefqwef} + tag4 | 10 | {123,456," ",""} +@@ -489,7 +490,7 @@ + SELECT tagname, tagowner, allowed_values FROM pg_tag ORDER BY 1; + tagname | tagowner | allowed_values + ---------+----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +- tag1 | 10 | {val1,val2,val3} ++ tag1 | 37847 | {val1,val2,val3} + tag2 | 10 | {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300} + tag3 | 10 | {dadkqjefpqfqfqe4l123j9i1snkqenp3412n4jnflqjenfaddpiqepj21304i12;kfnqpqnepfqefqwef} + tag4 | 10 | {123,456," ",""} +@@ -505,7 +506,7 @@ + SELECT tagname, tagowner, allowed_values FROM pg_tag ORDER BY 1; + tagname | tagowner | allowed_values + ---------+----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +- tag1 | 10 | {val1,val2,val3} ++ tag1 | 37847 | {val1,val2,val3} + tag2 | 10 | {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300} + tag3 | 10 | {dadkqjefpqfqfqe4l123j9i1snkqenp3412n4jnflqjenfaddpiqepj21304i12;kfnqpqnepfqefqwef} + tag4 | 10 | {123,456," ",""} +@@ -520,6 +521,8 @@ + \c postgres + -- Cleanup + DROP USER tag_user; ++DETAIL: owner of tag tag1 ++ERROR: role "tag_user" cannot be dropped because some objects depend on it + -- Test database with tag + -- Create database + CREATE DATABASE tag_db1 TAG (tag1 = 'novalue'); -- error +@@ -620,7 +623,7 @@ + SELECT tagname, tagowner, allowed_values FROM pg_tag ORDER BY 1; + tagname | tagowner | allowed_values + ---------+----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +- tag1 | 10 | {val1,val2,val3} ++ tag1 | 37847 | {val1,val2,val3} + tag2 | 10 | {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300} + tag3 | 10 | {dadkqjefpqfqfqe4l123j9i1snkqenp3412n4jnflqjenfaddpiqepj21304i12;kfnqpqnepfqefqwef} + tag4 | 10 | {123,456," ",""} +@@ -770,6 +773,7 @@ + ORDER BY 1; + rolname | rolsuper | rolconnlimit + ------------+----------+-------------- ++ tag_user | f | -1 + tag_user1 | f | -1 + tag_user10 | t | -1 + tag_user2 | f | -1 +@@ -780,7 +784,7 @@ + tag_user7 | f | 10 + tag_user8 | t | -1 + tag_user9 | t | -1 +-(10 rows) ++(11 rows) + + DROP TAG tag1; -- error + DETAIL: tag of tag description with tag tag1 +@@ -807,7 +811,7 @@ + SELECT tagname, tagowner, allowed_values FROM pg_tag ORDER BY 1; + tagname | tagowner | allowed_values + ---------+----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +- tag1 | 10 | {val1,val2,val3} ++ tag1 | 37847 | {val1,val2,val3} + tag2 | 10 | {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300} + tag3 | 10 | {dadkqjefpqfqfqe4l123j9i1snkqenp3412n4jnflqjenfaddpiqepj21304i12;kfnqpqnepfqefqwef} + tag4 | 10 | {123,456," ",""} +@@ -864,6 +868,7 @@ + ORDER BY 1; + rolname | rolsuper | rolconnlimit + ------------+----------+-------------- ++ tag_user | f | -1 + tag_user1 | f | -1 + tag_user10 | t | -1 + tag_user2 | f | -1 +@@ -874,7 +879,7 @@ + tag_user7 | f | 10 + tag_user8 | t | -1 + tag_user9 | t | -1 +-(10 rows) ++(11 rows) + + -- Drop User + DROP USER tag_user1; +@@ -897,9 +902,10 @@ + SELECT rolname, rolsuper, rolconnlimit FROM pg_authid + WHERE rolname like '%tag_user%' + ORDER BY 1; +- rolname | rolsuper | rolconnlimit +----------+----------+-------------- +-(0 rows) ++ rolname | rolsuper | rolconnlimit ++----------+----------+-------------- ++ tag_user | f | -1 ++(1 row) + + -- Test tablespace with tag + -- Create tablespace +@@ -977,7 +983,7 @@ + SELECT tagname, tagowner, allowed_values FROM pg_tag ORDER BY 1; + tagname | tagowner | allowed_values + ---------+----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +- tag1 | 10 | {val1,val2,val3} ++ tag1 | 37847 | {val1,val2,val3} + tag2 | 10 | {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300} + tag3 | 10 | {dadkqjefpqfqfqe4l123j9i1snkqenp3412n4jnflqjenfaddpiqepj21304i12;kfnqpqnepfqefqwef} + tag4 | 10 | {123,456," ",""} +@@ -1102,7 +1108,7 @@ + SELECT tagname, tagowner, allowed_values FROM pg_tag ORDER BY 1; + tagname | tagowner | allowed_values + ---------+----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +- tag1 | 10 | {val1,val2,val3} ++ tag1 | 37847 | {val1,val2,val3} + tag2 | 10 | {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300} + tag3 | 10 | {dadkqjefpqfqfqe4l123j9i1snkqenp3412n4jnflqjenfaddpiqepj21304i12;kfnqpqnepfqefqwef} + tag4 | 10 | {123,456," ",""} +@@ -1281,7 +1287,7 @@ + SELECT tagname, tagowner, allowed_values FROM pg_tag ORDER BY 1; + tagname | tagowner | allowed_values + ---------+----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +- tag1 | 10 | {val1,val2,val3} ++ tag1 | 37847 | {val1,val2,val3} + tag2 | 10 | {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300} + tag3 | 10 | {dadkqjefpqfqfqe4l123j9i1snkqenp3412n4jnflqjenfaddpiqepj21304i12;kfnqpqnepfqefqwef} + tag4 | 10 | {123,456," ",""} +diff -I HINT: -I CONTEXT: -I GP_IGNORE: -U3 /home/reshke/cloudberrydb/src/test/regress/expected/decode_expr.out /home/reshke/cloudberrydb/src/test/regress/results/decode_expr.out +--- /home/reshke/cloudberrydb/src/test/regress/expected/decode_expr.out 2025-01-28 16:19:41.393660652 +0000 ++++ /home/reshke/cloudberrydb/src/test/regress/results/decode_expr.out 2025-01-28 16:19:41.420661362 +0000 +@@ -1064,8 +1064,8 @@ + select * from decode_view order by region, country_code; + bus_name | country_code | region + ---------------------+--------------+---------- +- Taing Consulting | US | Americas + Test Solutions | CN | APJ ++ Taing Consulting | US | Americas + Computers Unlimited | IL | EMEA + Parts Plus | IT | EMEA + Kangaroos Inc. | AU | +diff -I HINT: -I CONTEXT: -I GP_IGNORE: -U3 /home/reshke/cloudberrydb/src/test/regress/expected/toast.out /home/reshke/cloudberrydb/src/test/regress/results/toast.out +--- /home/reshke/cloudberrydb/src/test/regress/expected/toast.out 2025-01-28 16:20:27.392871006 +0000 ++++ /home/reshke/cloudberrydb/src/test/regress/results/toast.out 2025-01-28 16:20:27.397871137 +0000 +@@ -131,7 +135,7 @@ + select gp_segment_id, get_rel_toast_count('toastable_ao') from gp_dist_random('gp_id') order by gp_segment_id; + gp_segment_id | get_rel_toast_count + ---------------+--------------------- +- 0 | 13 ++ 0 | 14 + 1 | 0 + 2 | 0 + (3 rows) +diff -I HINT: -I CONTEXT: -I GP_IGNORE: -U3 /home/reshke/cloudberrydb/src/test/regress/expected/as_alias.out /home/reshke/cloudberrydb/src/test/regress/results/as_alias.out +--- /home/reshke/cloudberrydb/src/test/regress/expected/as_alias.out 2025-01-28 16:22:13.978675347 +0000 ++++ /home/reshke/cloudberrydb/src/test/regress/results/as_alias.out 2025-01-28 16:22:13.995675794 +0000 +@@ -163,15 +163,15 @@ + SELECT c AS "C+1", max(a) AS MAX FROM test_having GROUP BY c HAVING count(*) > 2 OR min(a) = max(a) ORDER BY c; + C+1 | max + ----------+----- +- bbbb | 5 + XXXX | 0 ++ bbbb | 5 + (2 rows) + + SELECT c "C+1", max(a) AS MAX FROM test_having GROUP BY c HAVING count(*) > 2 OR min(a) = max(a) ORDER BY c; + C+1 | max + ----------+----- +- bbbb | 5 + XXXX | 0 ++ bbbb | 5 + (2 rows) + + SELECT 1 AS one WHERE 1 IN (SELECT 1); +diff -I HINT: -I CONTEXT: -I GP_IGNORE: -U3 /home/reshke/cloudberrydb/src/test/regress/expected/gp_dqa.out /home/reshke/cloudberrydb/src/test/regress/results/gp_dqa.out +--- /home/reshke/cloudberrydb/src/test/regress/expected/gp_dqa.out 2025-01-28 16:25:03.621138269 +0000 ++++ /home/reshke/cloudberrydb/src/test/regress/results/gp_dqa.out 2025-01-28 16:25:03.694140190 +0000 +@@ -3209,18 +3209,18 @@ + -> Redistribute Motion 3:3 (slice2; segments: 3) + Output: dqa_f3.b, (COALESCE(dqa_f2.y, 5)), dqa_f3.a, dqa_f3.d + Hash Key: dqa_f3.b +- -> Hash Right Join ++ -> Hash Left Join + Output: dqa_f3.b, (COALESCE(dqa_f2.y, 5)), dqa_f3.a, dqa_f3.d +- Hash Cond: (dqa_f2.x = dqa_f3.e) +- -> Seq Scan on public.dqa_f2 +- Output: dqa_f2.x, COALESCE(dqa_f2.y, 5) +- -> Hash ++ Hash Cond: (dqa_f3.e = dqa_f2.x) ++ -> Redistribute Motion 3:3 (slice3; segments: 3) + Output: dqa_f3.a, dqa_f3.d, dqa_f3.b, dqa_f3.e +- -> Redistribute Motion 3:3 (slice3; segments: 3) ++ Hash Key: dqa_f3.e ++ -> Seq Scan on public.dqa_f3 + Output: dqa_f3.a, dqa_f3.d, dqa_f3.b, dqa_f3.e +- Hash Key: dqa_f3.e +- -> Seq Scan on public.dqa_f3 +- Output: dqa_f3.a, dqa_f3.d, dqa_f3.b, dqa_f3.e ++ -> Hash ++ Output: dqa_f2.x, (COALESCE(dqa_f2.y, 5)) ++ -> Seq Scan on public.dqa_f2 ++ Output: dqa_f2.x, COALESCE(dqa_f2.y, 5) + GP_IGNORE:(25 rows) + + select sum(Distinct sub.c), count(a), sum(d) +diff -I HINT: -I CONTEXT: -I GP_IGNORE: -U3 /home/reshke/cloudberrydb/src/test/regress/expected/dsp.out /home/reshke/cloudberrydb/src/test/regress/results/dsp.out +--- /home/reshke/cloudberrydb/src/test/regress/expected/dsp.out 2025-01-28 16:29:36.174756085 +0000 ++++ /home/reshke/cloudberrydb/src/test/regress/results/dsp.out 2025-01-28 16:29:36.206756851 +0000 +@@ -1023,6 +1023,8 @@ + set default_table_access_method = ao_column; + set gp_default_storage_options = "blocksize=32768"; + alter table alter_table_reorg_ao set with (reorganize=true); ++DETAIL: Valid values are between "8192" and "2097152". ++ERROR: value 0 out of bounds for option "blocksize" + select c.relname, am.amname, c.relkind, c.reloptions + from pg_class c left join pg_am am on (c.relam = am.oid) + where c.relname = 'alter_table_reorg_ao'; +diff -I HINT: -I CONTEXT: -I GP_IGNORE: -U3 /home/reshke/cloudberrydb/src/test/regress/expected/alter_distribution_policy.out /home/reshke/cloudberrydb/src/test/regress/results/alter_distribution_policy.out +--- /home/reshke/cloudberrydb/src/test/regress/expected/alter_distribution_policy.out 2025-01-28 16:30:27.143981446 +0000 ++++ /home/reshke/cloudberrydb/src/test/regress/results/alter_distribution_policy.out 2025-01-28 16:30:27.182982387 +0000 +@@ -157,6 +157,8 @@ + (1 row) + + alter table atsdb_ao set distributed by (j); ++DETAIL: Valid values are between "8192" and "2097152". ++ERROR: value 0 out of bounds for option "blocksize" + -- Still AO? + select count(*) from pg_appendonly where relid='atsdb_ao'::regclass; + count +@@ -901,6 +903,8 @@ + create table atsdb with (appendonly=true) as select * from + generate_series(1,1000); + alter table only atsdb set with(reorganize=true) distributed by (generate_series); ++DETAIL: Valid values are between "8192" and "2097152". ++ERROR: value 0 out of bounds for option "blocksize" + select count(*) from atsdb; + count + ------- +@@ -1292,6 +1296,8 @@ + (1 row) + + alter table mpp5754 set distributed by (n_nationkey); ++DETAIL: Valid values are between "8192" and "2097152". ++ERROR: value 0 out of bounds for option "blocksize" + select * from mpp5754 order by n_nationkey; + n_nationkey | n_name | n_regionkey | n_comment + -------------+---------------------------+-------------+----------------------------------------------------- diff --git a/src/test/regress/regression.out b/src/test/regress/regression.out new file mode 100644 index 00000000000..183cbe0d70d --- /dev/null +++ b/src/test/regress/regression.out @@ -0,0 +1,462 @@ +External fts disabled. Using default answer files +Optimizer disabled. Using planner answer files +Resource group disabled. Using default answer files +Normal cluster detected. Replace '@hostname@' by hostname of contentid = 0 +Force parallel mode disabled. Using default answer files +test tablespace ... ok 6356 ms (diff 107 ms) +parallel group (20 tests): regproc pg_lsn txid int2 text name oid int4 char varchar int8 float4 money boolean uuid float8 bit enum numeric rangetypes + boolean ... ok 1641 ms (diff 81 ms) + char ... ok 865 ms (diff 59 ms) + name ... ok 729 ms (diff 62 ms) + varchar ... ok 869 ms (diff 58 ms) + text ... ok 686 ms (diff 74 ms) + int2 ... ok 634 ms (diff 68 ms) + int4 ... ok 759 ms (diff 73 ms) + int8 ... ok 1059 ms (diff 95 ms) + oid ... ok 743 ms (diff 57 ms) + float4 ... ok 1281 ms (diff 97 ms) + float8 ... ok 2231 ms (diff 122 ms) + bit ... ok 2319 ms (diff 87 ms) + numeric ... ok 5267 ms (diff 198 ms) + txid ... ok 552 ms (diff 66 ms) + uuid ... ok 1820 ms (diff 61 ms) + enum ... ok 3890 ms (diff 86 ms) + money ... ok 1560 ms (diff 75 ms) + rangetypes ... ok 5947 ms (diff 142 ms) + pg_lsn ... ok 479 ms (diff 64 ms) + regproc ... ok 291 ms (diff 73 ms) +parallel group (20 tests): time timetz lseg line date path macaddr circle create_function_0 macaddr8 interval point inet polygon numerology timestamp box timestamptz strings multirangetypes + strings ... ok 2508 ms (diff 170 ms) + numerology ... ok 1797 ms (diff 61 ms) + point ... ok 1316 ms (diff 77 ms) + lseg ... ok 554 ms (diff 56 ms) + line ... ok 627 ms (diff 60 ms) + box ... ok 2132 ms (diff 85 ms) + path ... ok 667 ms (diff 58 ms) + polygon ... ok 1754 ms (diff 71 ms) + circle ... ok 743 ms (diff 59 ms) + date ... ok 647 ms (diff 122 ms) + time ... ok 474 ms (diff 60 ms) + timetz ... ok 495 ms (diff 65 ms) + timestamp ... ok 1892 ms (diff 147 ms) + timestamptz ... ok 2399 ms (diff 184 ms) + interval ... ok 1070 ms (diff 98 ms) + inet ... ok 1449 ms (diff 100 ms) + macaddr ... ok 707 ms (diff 60 ms) + macaddr8 ... ok 915 ms (diff 70 ms) + multirangetypes ... ok 3608 ms (diff 230 ms) + create_function_0 ... ok 770 ms (diff 60 ms) +parallel group (12 tests): comments unicode tstypes misc_sanity xid type_sanity regex expressions horology mvcc opr_sanity geometry + geometry ... ok 1305 ms (diff 286 ms) + horology ... ok 820 ms (diff 202 ms) + tstypes ... ok 276 ms (diff 114 ms) + regex ... ok 806 ms (diff 87 ms) + type_sanity ... ok 791 ms (diff 94 ms) + opr_sanity ... ok 1223 ms (diff 171 ms) + misc_sanity ... ok 312 ms (diff 64 ms) + comments ... ok 15 ms (diff 58 ms) + expressions ... ok 814 ms (diff 76 ms) + unicode ... ok 57 ms (diff 55 ms) + xid ... ok 686 ms (diff 73 ms) + mvcc ... ok 888 ms (diff 56 ms) +test create_function_1 ... ok 93 ms (diff 55 ms) +test create_type ... ok 1015 ms (diff 77 ms) +test create_table ... ok 9650 ms (diff 142 ms) +test create_function_2 ... ok 291 ms (diff 59 ms) +parallel group (5 tests): copyselect copydml copy insert_conflict insert + copy ... ok 8682 ms (diff 72 ms) + copyselect ... ok 1165 ms (diff 61 ms) + copydml ... ok 3349 ms (diff 60 ms) + insert ... ok 14499 ms (diff 113 ms) + insert_conflict ... ok 8923 ms (diff 97 ms) +parallel group (3 tests): create_operator create_procedure create_misc + create_misc ... ok 1297 ms (diff 67 ms) + create_operator ... ok 282 ms (diff 70 ms) + create_procedure ... ok 1007 ms (diff 74 ms) +parallel group (5 tests): index_including_gist create_index_spgist index_including create_view create_index + create_index ... ok 16074 ms (diff 207 ms) + create_index_spgist ... ok 2559 ms (diff 122 ms) + create_view ... ok 8034 ms (diff 154 ms) + index_including ... ok 4237 ms (diff 76 ms) + index_including_gist ... ok 2246 ms (diff 62 ms) +test gp_gin_index ... ok 1187 ms (diff 235 ms) +parallel group (16 tests): errors infinite_recurse hash_func create_cast typed_table select create_am roleattributes create_aggregate create_function_3 drop_if_exists constraints vacuum inherit updatable_views triggers + create_aggregate ... ok 5867 ms (diff 74 ms) + create_function_3 ... ok 8623 ms (diff 89 ms) + create_cast ... ok 1309 ms (diff 59 ms) + constraints ... ok 11319 ms (diff 94 ms) + triggers ... ok 31879 ms (diff 222 ms) + select ... ok 3519 ms (diff 96 ms) + inherit ... ok 24630 ms (diff 188 ms) + typed_table ... ok 3003 ms (diff 60 ms) + vacuum ... ok 14390 ms (diff 75 ms) + drop_if_exists ... ok 9100 ms (diff 71 ms) + updatable_views ... ok 26646 ms (diff 207 ms) + roleattributes ... ok 5861 ms (diff 69 ms) + create_am ... ok 3612 ms (diff 73 ms) + hash_func ... ok 1048 ms (diff 73 ms) + errors ... ok 100 ms (diff 75 ms) + infinite_recurse ... ok 381 ms (diff 53 ms) +test disable_autovacuum ... ok 13702 ms (diff 54 ms) +test vacuum_stats ... ok 350 ms (diff 56 ms) +test enable_autovacuum ... ok 63 ms (diff 61 ms) +test sanity_check ... ok 5062 ms (diff 64 ms) +parallel group (17 tests): select_distinct_on random select_having case delete select_implicit hash_index union portals select_into select_distinct subselect arrays btree_index join aggregates update + select_into ... ok 5192 ms (diff 70 ms) + select_distinct ... ok 5651 ms (diff 98 ms) + select_distinct_on ... ok 393 ms (diff 58 ms) + select_implicit ... ok 2052 ms (diff 70 ms) + select_having ... ok 1016 ms (diff 59 ms) + subselect ... ok 7525 ms (diff 146 ms) + union ... ok 4641 ms (diff 124 ms) + case ... ok 1655 ms (diff 73 ms) + join ... ok 15209 ms (diff 359 ms) + aggregates ... ok 17243 ms (diff 213 ms) + random ... ok 783 ms (diff 56 ms) + portals ... ok 4915 ms (diff 116 ms) + arrays ... ok 9098 ms (diff 178 ms) + btree_index ... ok 11949 ms (diff 74 ms) + hash_index ... ok 3119 ms (diff 64 ms) + update ... ok 19533 ms (diff 107 ms) + delete ... ok 1829 ms (diff 54 ms) +test namespace ... ok 392 ms (diff 60 ms) +test transactions ... ok 2078 ms (diff 108 ms) +parallel group (22 tests): init_privs drop_operator security_label appendonly_sample aocs_sample tablesample lock password object_address gist spgist replica_identity gin collate join_hash brin identity groupingsets matview generated privileges rowsecurity + brin ... ok 12983 ms (diff 84 ms) + gin ... ok 7958 ms (diff 68 ms) + gist ... ok 6556 ms (diff 73 ms) + spgist ... ok 6957 ms (diff 58 ms) + privileges ... ok 28617 ms (diff 182 ms) + init_privs ... ok 563 ms (diff 51 ms) + security_label ... ok 4210 ms (diff 54 ms) + collate ... ok 8543 ms (diff 88 ms) + matview ... ok 19902 ms (diff 94 ms) + lock ... ok 5978 ms (diff 61 ms) + replica_identity ... ok 7327 ms (diff 65 ms) + rowsecurity ... ok 29529 ms (diff 265 ms) + object_address ... ok 6450 ms (diff 191 ms) + tablesample ... ok 4894 ms (diff 72 ms) + groupingsets ... ok 14845 ms (diff 162 ms) + drop_operator ... ok 1134 ms (diff 55 ms) + password ... ok 6133 ms (diff 59 ms) + identity ... ok 13998 ms (diff 83 ms) + generated ... ok 20067 ms (diff 112 ms) + join_hash ... ok 10382 ms (diff 108 ms) + appendonly_sample ... ok 4582 ms (diff 69 ms) + aocs_sample ... ok 4761 ms (diff 69 ms) +parallel group (2 tests): brin_bloom brin_multi + brin_bloom ... ok 1534 ms (diff 73 ms) + brin_multi ... ok 2932 ms (diff 76 ms) +test task ... ok 2727 ms (diff 59 ms) +parallel group (15 tests): collate.icu.utf8 dbsize async sysviews tidrangescan tidscan misc_functions alter_operator tsrf tid misc incremental_sort incremental_matview alter_generic create_table_like + create_table_like ... ok 9895 ms (diff 84 ms) + alter_generic ... ok 8287 ms (diff 97 ms) + alter_operator ... ok 1013 ms (diff 62 ms) + misc ... ok 2383 ms (diff 79 ms) + async ... ok 142 ms (diff 55 ms) + dbsize ... ok 80 ms (diff 63 ms) + misc_functions ... ok 982 ms (diff 67 ms) + sysviews ... ok 263 ms (diff 59 ms) + tsrf ... ok 1166 ms (diff 87 ms) + tid ... ok 1874 ms (diff 56 ms) + tidscan ... ok 951 ms (diff 70 ms) + tidrangescan ... ok 822 ms (diff 75 ms) + collate.icu.utf8 ... ok 67 ms (diff 153 ms) + incremental_sort ... ok 2794 ms (diff 134 ms) + incremental_matview ... ok 7253 ms (diff 99 ms) +test ivm ... ok 1752 ms (diff 71 ms) +parallel group (5 tests): collate.linux.utf8 amutils psql_crosstab psql stats_ext + psql ... ok 3957 ms (diff 337 ms) + psql_crosstab ... ok 488 ms (diff 62 ms) + amutils ... ok 243 ms (diff 66 ms) + stats_ext ... ok 13719 ms (diff 209 ms) + collate.linux.utf8 ... ok 23 ms (diff 132 ms) +test select_parallel ... ok 5669 ms (diff 117 ms) +test write_parallel ... ok 191 ms (diff 58 ms) +test vacuum_parallel ... ok 891 ms (diff 58 ms) +parallel group (2 tests): subscription publication + publication ... ok 3025 ms (diff 70 ms) + subscription ... ok 1146 ms (diff 69 ms) +parallel group (16 tests): advisory_lock portals_p2 combocid xmlmap tsdicts functional_deps indirect_toast select_views guc window equivclass dependency tsearch bitmapops cluster foreign_data + select_views ... ok 2968 ms (diff 129 ms) + portals_p2 ... ok 424 ms (diff 61 ms) + cluster ... ok 9937 ms (diff 84 ms) + dependency ... ok 5285 ms (diff 61 ms) + guc ... ok 4845 ms (diff 93 ms) + bitmapops ... ok 8381 ms (diff 84 ms) + combocid ... ok 1148 ms (diff 63 ms) + tsearch ... ok 5534 ms (diff 185 ms) + tsdicts ... ok 2398 ms (diff 87 ms) + foreign_data ... ok 13652 ms (diff 172 ms) + window ... ok 4998 ms (diff 241 ms) + xmlmap ... ok 1658 ms (diff 114 ms) + functional_deps ... ok 2418 ms (diff 67 ms) + advisory_lock ... ok 405 ms (diff 68 ms) + indirect_toast ... ok 2499 ms (diff 66 ms) + equivclass ... ok 5142 ms (diff 79 ms) +parallel group (6 tests): jsonpath_encoding json_encoding jsonpath jsonb_jsonpath json jsonb + json ... ok 1203 ms (diff 197 ms) + jsonb ... ok 2282 ms (diff 300 ms) + json_encoding ... ok 29 ms (diff 65 ms) + jsonpath ... ok 54 ms (diff 94 ms) + jsonpath_encoding ... ok 22 ms (diff 61 ms) + jsonb_jsonpath ... ok 161 ms (diff 164 ms) +parallel group (17 tests): prepare limit returning conversion xml rowtypes plancache copy2 temp sequence with polymorphism truncate rangefuncs domain plpgsql alter_table + plancache ... ok 6196 ms (diff 87 ms) + limit ... ok 1060 ms (diff 78 ms) + plpgsql ... ok 22950 ms (diff 324 ms) + copy2 ... ok 7116 ms (diff 85 ms) + temp ... ok 8294 ms (diff 74 ms) + domain ... ok 19827 ms (diff 118 ms) + rangefuncs ... ok 15639 ms (diff 166 ms) + prepare ... ok 400 ms (diff 64 ms) + conversion ... ok 3591 ms (diff 85 ms) + truncate ... ok 15149 ms (diff 82 ms) + alter_table ... ok 53665 ms (diff 312 ms) + sequence ... ok 8913 ms (diff 93 ms) + polymorphism ... ok 13686 ms (diff 157 ms) + rowtypes ... ok 6008 ms (diff 111 ms) + returning ... ok 3009 ms (diff 69 ms) + with ... ok 9658 ms (diff 191 ms) + xml ... ok 3858 ms (diff 134 ms) +test gp_foreign_data ... ok 645 ms (diff 61 ms) +parallel group (11 tests): explain hash_part memoize reloptions partition_info compression tuplesort partition_aggregate partition_prune indexing partition_join + partition_join ... ok 31907 ms (diff 350 ms) + partition_prune ... ok 22514 ms (diff 364 ms) + reloptions ... ok 2425 ms (diff 65 ms) + hash_part ... ok 1169 ms (diff 59 ms) + indexing ... ok 26975 ms (diff 136 ms) + partition_aggregate ... ok 6273 ms (diff 130 ms) + partition_info ... ok 2767 ms (diff 71 ms) + tuplesort ... ok 5639 ms (diff 83 ms) + explain ... FAILED 480 ms (diff 196 ms) + compression ... ok 3342 ms (diff 148 ms) + memoize ... ok 1830 ms (diff 70 ms) +parallel group (2 tests): oidjoins event_trigger + event_trigger ... ok 4845 ms (diff 89 ms) + oidjoins ... ok 878 ms (diff 184 ms) +test fast_default ... ok 7543 ms (diff 92 ms) +test constraints_check ... ok 271 ms (diff 57 ms) +test stats ... ok 1472 ms (diff 65 ms) +test tag ... FAILED 24090 ms (diff 283 ms) +test pg_ext_aux ... ok 811 ms (diff 60 ms) +test pg_dump_binary_upgrade ... ok 1764 ms (diff 55 ms) +test gp_dispatch_keepalives ... ok 2794 ms (diff 55 ms) +test copy_eol ... ok 399 ms (diff 57 ms) +test disable_autovacuum ... ok 19136 ms (diff 70 ms) +test python_processed64bit ... ok 8249 ms (diff 59 ms) +test enable_autovacuum ... ok 46 ms (diff 69 ms) +test log_guc ... ok 2883 ms (diff 62 ms) +test instr_in_shmem_setup ... ok 14361 ms (diff 53 ms) +test instr_in_shmem ... ok 697 ms (diff 69 ms) +test createdb ... ok 35373 ms (diff 64 ms) +parallel group (20 tests): gp_metadata gp_xml gp_prepared_xacts gp_backend_info gp_sort resource_queue_with_rule spi default_parameters variadic_parameters combocid_gp returning_gp shared_scan triggers_gp gp_aggregates gp_types gp_index cluster_gp gp_aggregates_costs function_extensions update_gp + gp_aggregates ... ok 4258 ms (diff 76 ms) + gp_aggregates_costs ... ok 10139 ms (diff 69 ms) + gp_metadata ... ok 38 ms (diff 53 ms) + variadic_parameters ... ok 2535 ms (diff 57 ms) + default_parameters ... ok 2502 ms (diff 62 ms) + function_extensions ... ok 11285 ms (diff 92 ms) + spi ... ok 2243 ms (diff 56 ms) + gp_xml ... ok 40 ms (diff 53 ms) + shared_scan ... ok 2961 ms (diff 65 ms) + update_gp ... ok 13231 ms (diff 95 ms) + triggers_gp ... ok 3998 ms (diff 60 ms) + returning_gp ... ok 2936 ms (diff 60 ms) + resource_queue_with_rule ... ok 1354 ms (diff 54 ms) + gp_types ... ok 4689 ms (diff 88 ms) + gp_index ... ok 4825 ms (diff 58 ms) + cluster_gp ... ok 5984 ms (diff 56 ms) + combocid_gp ... ok 2918 ms (diff 65 ms) + gp_sort ... ok 873 ms (diff 53 ms) + gp_prepared_xacts ... ok 87 ms (diff 53 ms) + gp_backend_info ... ok 657 ms (diff 61 ms) +test spi_processed64bit ... ok 4863 ms (diff 66 ms) +test gp_tablespace_with_faults ... ok 109955 ms (diff 109 ms) +test gp_tablespace ... ok 8264 ms (diff 79 ms) +test temp_tablespaces ... ok 3022 ms (diff 67 ms) +test default_tablespace ... ok 5823 ms (diff 59 ms) +parallel group (20 tests): opr_sanity_gp replication_slots leastsquares window_views gp_create_view create_table_like_gp gp_constraints percentile limit_gp case_gp matview_ao gp_create_table union_gp notin gpcopy_dispatch gpcopy_encoding decode_expr bitmapscan_ao join_gp bitmapscan + leastsquares ... ok 1004 ms (diff 67 ms) + opr_sanity_gp ... ok 101 ms (diff 55 ms) + decode_expr ... FAILED 15475 ms (diff 210 ms) + bitmapscan ... ok 34382 ms (diff 101 ms) + bitmapscan_ao ... ok 22640 ms (diff 68 ms) + case_gp ... ok 8013 ms (diff 98 ms) + limit_gp ... ok 7773 ms (diff 67 ms) + notin ... ok 10595 ms (diff 170 ms) + percentile ... ok 7526 ms (diff 91 ms) + join_gp ... ok 26576 ms (diff 227 ms) + union_gp ... ok 10532 ms (diff 144 ms) + gpcopy_encoding ... ok 12206 ms (diff 56 ms) + gp_create_table ... ok 10211 ms (diff 72 ms) + gp_create_view ... ok 3306 ms (diff 58 ms) + window_views ... ok 3298 ms (diff 59 ms) + replication_slots ... ok 112 ms (diff 54 ms) + create_table_like_gp ... ok 5200 ms (diff 59 ms) + gp_constraints ... ok 5595 ms (diff 61 ms) + matview_ao ... ok 8181 ms (diff 58 ms) + gpcopy_dispatch ... ok 10607 ms (diff 63 ms) +test gpcopy ... ok 18352 ms (diff 139 ms) +parallel group (2 tests): orca_groupingsets_fallbacks orca_static_pruning + orca_static_pruning ... ok 2441 ms (diff 69 ms) + orca_groupingsets_fallbacks ... ok 464 ms (diff 58 ms) +parallel group (18 tests): gp_copy_dtx information_schema sublink matrix guc_env_var filter olap_setup olap_plans explain_format opclass_ddl gpdist_legacy_opclasses gp_explain gpdist_opclasses complex gpctas table_functions distributed_transactions gpdist + filter ... ok 2349 ms (diff 87 ms) + gpctas ... ok 5686 ms (diff 72 ms) + gpdist ... ok 11650 ms (diff 95 ms) + gpdist_opclasses ... ok 5202 ms (diff 71 ms) + gpdist_legacy_opclasses ... ok 4527 ms (diff 82 ms) + matrix ... ok 1239 ms (diff 63 ms) + sublink ... ok 1184 ms (diff 63 ms) + table_functions ... ok 7096 ms (diff 256 ms) + olap_setup ... ok 2602 ms (diff 59 ms) + complex ... ok 5269 ms (diff 114 ms) + opclass_ddl ... ok 3515 ms (diff 59 ms) + information_schema ... ok 1141 ms (diff 62 ms) + guc_env_var ... ok 1238 ms (diff 57 ms) + gp_explain ... ok 5197 ms (diff 89 ms) + distributed_transactions ... ok 9096 ms (diff 108 ms) + explain_format ... ok 3015 ms (diff 102 ms) + olap_plans ... ok 2757 ms (diff 81 ms) + gp_copy_dtx ... ok 849 ms (diff 54 ms) +test guc_gp ... ok 1763 ms (diff 96 ms) +test toast ... FAILED 8085 ms (diff 125 ms) +test misc_jiras ... ok 811 ms (diff 57 ms) +test statement_mem_for_windowagg ... ok 980 ms (diff 67 ms) +test namespace_gp ... ok 505 ms (diff 61 ms) +test gp_connections ... ok (test process exited with exit code 2) 2312 ms (diff 57 ms) +test bitmap_index ... ok 65518 ms (diff 111 ms) +parallel group (5 tests): truncate_gp gp_dump_query_oids gp_owner_permission incremental_analyze analyze + gp_dump_query_oids ... ok 4010 ms (diff 68 ms) + analyze ... ok 31665 ms (diff 119 ms) + gp_owner_permission ... ok 12249 ms (diff 56 ms) + incremental_analyze ... ok 27810 ms (diff 173 ms) + truncate_gp ... ok 1204 ms (diff 59 ms) +parallel group (10 tests): gp_pullup_expr dispatch_encoding gp_rules gpparams motion_gp indexjoin as_alias with_clause regex_gp transient_types + indexjoin ... ok 1564 ms (diff 69 ms) + as_alias ... FAILED 2305 ms (diff 177 ms) + regex_gp ... ok 3433 ms (diff 468 ms) + gpparams ... ok 1224 ms (diff 65 ms) + with_clause ... ok 3254 ms (diff 152 ms) + transient_types ... ok 3554 ms (diff 76 ms) + gp_rules ... ok 828 ms (diff 55 ms) + dispatch_encoding ... ok 802 ms (diff 55 ms) + motion_gp ... ok 1330 ms (diff 60 ms) + gp_pullup_expr ... ok 323 ms (diff 53 ms) +parallel group (14 tests): icudp/gp_interconnect_cache_future_packets icudp/gp_interconnect_timer_checking_period icudp/gp_interconnect_fc_method icudp/gp_interconnect_timer_period icudp/gp_interconnect_default_rtt icudp/gp_interconnect_queue_depth icudp/gp_interconnect_min_retries_before_timeout icudp/gp_interconnect_snd_queue_depth icudp/gp_interconnect_min_rto icudp/gp_interconnect_transmit_timeout icudp/queue_depth_combination_loss icudp/queue_depth_combination_capacity icudp/gp_interconnect_snd_queue_depth_longtime icudp/gp_interconnect_queue_depth_longtime + icudp/gp_interconnect_queue_depth ... ok 847 ms (diff 73 ms) + icudp/gp_interconnect_queue_depth_longtime ... ok 1969 ms (diff 65 ms) + icudp/gp_interconnect_snd_queue_depth ... ok 903 ms (diff 59 ms) + icudp/gp_interconnect_snd_queue_depth_longtime ... ok 1939 ms (diff 63 ms) + icudp/gp_interconnect_min_retries_before_timeout ... ok 895 ms (diff 62 ms) + icudp/gp_interconnect_transmit_timeout ... ok 1008 ms (diff 61 ms) + icudp/gp_interconnect_cache_future_packets ... ok 713 ms (diff 59 ms) + icudp/gp_interconnect_default_rtt ... ok 842 ms (diff 61 ms) + icudp/gp_interconnect_fc_method ... ok 811 ms (diff 59 ms) + icudp/gp_interconnect_min_rto ... ok 977 ms (diff 61 ms) + icudp/gp_interconnect_timer_checking_period ... ok 723 ms (diff 61 ms) + icudp/gp_interconnect_timer_period ... ok 839 ms (diff 63 ms) + icudp/queue_depth_combination_loss ... ok 1112 ms (diff 66 ms) + icudp/queue_depth_combination_capacity ... ok 1129 ms (diff 65 ms) +test event_trigger_gp ... ok 210 ms (diff 56 ms) +test deadlock ... ok 1198 ms (diff 58 ms) +test deadlock2 ... ok 1385 ms (diff 67 ms) +parallel group (7 tests): workfile/sort_spill workfile/materialize_spill workfile/sisc_sort_spill workfile/hashjoin_spill workfile/sisc_mat_sort workfile/spilltodisk workfile/hashagg_spill + workfile/hashagg_spill ... ok 14353 ms (diff 66 ms) + workfile/hashjoin_spill ... ok 7764 ms (diff 60 ms) + workfile/materialize_spill ... ok 4805 ms (diff 59 ms) + workfile/sisc_mat_sort ... ok 10919 ms (diff 58 ms) + workfile/sisc_sort_spill ... ok 7281 ms (diff 59 ms) + workfile/sort_spill ... ok 3583 ms (diff 59 ms) + workfile/spilltodisk ... ok 12222 ms (diff 60 ms) +test zlib ... ok 8205 ms (diff 66 ms) +test workfile_limits ... ok 2724 ms (diff 56 ms) +test segspace ... ok 27599 ms (diff 85 ms) +test cursor ... ok 3359 ms (diff 88 ms) +test query_finish_pending ... ok 1871 ms (diff 87 ms) +parallel group (10 tests): gptokencheck tidscan_gp gpdiffcheck dml_in_udf co_nestloop_idxscan gp_array_agg sequence_gp gp_hashagg agg_pushdown gpdtm_plpgsql + gpdiffcheck ... ok 922 ms (diff 84 ms) + gptokencheck ... ok 51 ms (diff 66 ms) + gp_hashagg ... ok 3605 ms (diff 70 ms) + sequence_gp ... ok 3263 ms (diff 67 ms) + tidscan_gp ... ok 855 ms (diff 55 ms) + co_nestloop_idxscan ... ok 2672 ms (diff 78 ms) + dml_in_udf ... ok 2593 ms (diff 68 ms) + gpdtm_plpgsql ... ok 33738 ms (diff 81 ms) + agg_pushdown ... ok 4930 ms (diff 113 ms) + gp_array_agg ... ok 2850 ms (diff 91 ms) +test dtm_retry ... ok 4763 ms (diff 68 ms) +parallel group (14 tests): gp_transactions subselect_gp2 subselect_gp_indexes create_table_distpol olap_group rangefuncs_cdb olap_window_seq partial_table query_finish gp_dqa subselect_gp sirv_functions appendonly alter_distpol_dropped + rangefuncs_cdb ... ok 10481 ms (diff 110 ms) + gp_dqa ... FAILED 23643 ms (diff 410 ms) + subselect_gp ... ok 24184 ms (diff 287 ms) + subselect_gp2 ... ok 1854 ms (diff 65 ms) + gp_transactions ... ok 449 ms (diff 61 ms) + olap_group ... ok 9989 ms (diff 331 ms) + olap_window_seq ... ok 14450 ms (diff 506 ms) + sirv_functions ... ok 30158 ms (diff 157 ms) + appendonly ... ok 48569 ms (diff 143 ms) + create_table_distpol ... ok 6633 ms (diff 65 ms) + alter_distpol_dropped ... ok 63771 ms (diff 324 ms) + query_finish ... ok 21902 ms (diff 75 ms) + partial_table ... ok 14842 ms (diff 418 ms) + subselect_gp_indexes ... ok 4220 ms (diff 100 ms) +test gp_distinct_plans ... ok 603 ms (diff 81 ms) +parallel group (9 tests): partition_with_user_defined_function partition_subquery partition_with_user_defined_function_that_truncates partition_unlogged partition1 partition_ddl partition_indexing partition_storage partition + partition ... ok 138623 ms (diff 401 ms) + partition1 ... ok 48844 ms (diff 251 ms) + partition_indexing ... ok 73159 ms (diff 87 ms) + partition_storage ... ok 76127 ms (diff 107 ms) + partition_ddl ... ok 67311 ms (diff 214 ms) + partition_with_user_defined_function ... ok 329 ms (diff 60 ms) + partition_unlogged ... ok 887 ms (diff 65 ms) + partition_subquery ... ok 400 ms (diff 59 ms) + partition_with_user_defined_function_that_truncates ... ok 821 ms (diff 58 ms) +parallel group (3 tests): index_constraint_naming index_constraint_naming_upgrade index_constraint_naming_partition + index_constraint_naming ... ok 1444 ms (diff 80 ms) + index_constraint_naming_partition ... ok 20603 ms (diff 160 ms) + index_constraint_naming_upgrade ... ok 1600 ms (diff 73 ms) +parallel group (2 tests): brin_ao brin_aocs + brin_ao ... ok 67698 ms (diff 87 ms) + brin_aocs ... ok 68294 ms (diff 84 ms) +test sreh ... ok 1678 ms (diff 82 ms) +parallel group (5 tests): create_am_gp rle not_out_of_shmem_exit_slots dsp rle_delta + rle ... ok 10365 ms (diff 553 ms) + rle_delta ... ok 37110 ms (diff 162 ms) + dsp ... FAILED 26470 ms (diff 245 ms) + not_out_of_shmem_exit_slots ... ok 11126 ms (diff 74 ms) + create_am_gp ... ok 2603 ms (diff 60 ms) +test cbdb_optimizer_test ... ok 1833 ms (diff 70 ms) +test gp_runtime_filter ... ok 911 ms (diff 75 ms) +parallel group (2 tests): cbdb_db_size_functions db_size_functions + db_size_functions ... ok 2443 ms (diff 73 ms) + cbdb_db_size_functions ... ok 484 ms (diff 58 ms) +parallel group (10 tests): external_table_union_all external_table_persistent_error_log aoco_privileges eagerfree external_table_create_privs alter_distribution_policy column_compression external_table alter_table_aocs alter_table_aocs2 + external_table ... ok 38165 ms (diff 318 ms) + external_table_union_all ... ok 1004 ms (diff 69 ms) + external_table_create_privs ... ok 21324 ms (diff 112 ms) + external_table_persistent_error_log ... ok 1075 ms (diff 68 ms) + column_compression ... ok 35617 ms (diff 153 ms) + eagerfree ... ok 13432 ms (diff 146 ms) + alter_table_aocs ... ok 38558 ms (diff 107 ms) + alter_table_aocs2 ... ok 43940 ms (diff 103 ms) + alter_distribution_policy ... FAILED 34404 ms (diff 268 ms) + aoco_privileges ... ok 2297 ms (diff 59 ms) +parallel group (7 tests): alter_table_set subtransaction_visibility udf_exception_blocks alter_table_gp alter_table_ao oid_consistency alter_table_set_am + alter_table_set ... ok 801 ms (diff 72 ms) + alter_table_gp ... ok 13209 ms (diff 77 ms) + alter_table_ao ... ok 18150 ms (diff 86 ms) + alter_table_set_am ... ok 22119 ms (diff 136 ms) + subtransaction_visibility ... ok 1147 ms (diff 65 ms) + oid_consistency ... ok 20597 ms (diff 90 ms) + udf_exception_blocks ... ok 7597 ms (diff 105 ms) +test aocs ... ok 38796 ms (diff 143 ms) +test ic ... ok 7658 ms (diff 81 ms) +test resource_queue ... ok 2208 ms (diff 85 ms) +test resource_queue_function ... ok 537 ms (diff 55 ms) +test disable_autovacuum ... ok 40974 ms (diff 55 ms) +test cluster_gp ... ok 3639 ms (diff 59 ms) +test instr_in_shmem_verify ... ok 709 ms (diff 59 ms) +test partition_locking ... ok 4027 ms (diff 82 ms) +test vacuum_gp ... \ No newline at end of file