This is an automated email from the ASF dual-hosted git repository. yjhjstz pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/cloudberry.git
commit 9916d77c7c05482bb46774a3b8756621cc93c569 Author: Divyesh Vanjare <[email protected]> AuthorDate: Wed Aug 10 16:37:34 2022 -0700 Removing AOCO add column fixme We won't need to execute it on QE. QD/utility can benefit from this optimization. --- src/backend/commands/tablecmds.c | 10 ++++----- src/test/regress/expected/alter_table_aocs2.out | 30 +++++++++++++++++++++++++ src/test/regress/sql/alter_table_aocs2.sql | 22 ++++++++++++++++++ 3 files changed, 56 insertions(+), 6 deletions(-) diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 3af452d491..ba85d6324d 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -8644,13 +8644,11 @@ ATExecAddColumn(List **wqueue, AlteredTableInfo *tab, Relation rel, * We have to do it while processing the root partition because that's the * only level where the `ADD COLUMN` subcommands are populated. * - * GPDB_12_MERGE_FIXME: Given now wqueue gets dispatched from QD to QE, no - * need to perform this step on QE. Only need to execute this block of - * code on QD and QE will get the information to perform optimized rewrite - * for CO or not. Leaving fixme here as CO code is not working currently, - * hence hard to validate if works correctly or not. + * QD will dispatch wqueue and the QE will get all the info + * to perform the column optimized rewrite. + * So, we only need to execute this block on QD. */ - if (!recursing && (tab->relkind == RELKIND_PARTITIONED_TABLE || tab->relkind == RELKIND_RELATION)) + if (!recursing && (tab->relkind == RELKIND_PARTITIONED_TABLE || tab->relkind == RELKIND_RELATION) && Gp_role != GP_ROLE_EXECUTE) { bool aocs_write_new_columns_only; /* diff --git a/src/test/regress/expected/alter_table_aocs2.out b/src/test/regress/expected/alter_table_aocs2.out index 29f1c482da..e0622f8a92 100644 --- a/src/test/regress/expected/alter_table_aocs2.out +++ b/src/test/regress/expected/alter_table_aocs2.out @@ -969,3 +969,33 @@ SELECT * FROM subpartition_aoco_leaf; 0 | subpartition_aoco_leaf_1_prt_intermediate_2_prt_leaf | ao_column | full table rewritten (6 rows) +-- Check if add column doesn't rewrite the table +CREATE TABLE addcol(i int) WITH (appendonly=true, orientation=column); +INSERT INTO addcol SELECT generate_series(1, 5); +CREATE TEMP TABLE relfilebefore AS + SELECT -1 segid, relname, relfilenode FROM pg_class WHERE relname LIKE 'addcol%' + UNION SELECT gp_segment_id segid, relname, relfilenode FROM gp_dist_random('pg_class') + WHERE relname LIKE 'addcol%' ORDER BY segid; +ALTER TABLE addcol ADD COLUMN j int DEFAULT 5; +CREATE TEMP TABLE relfileafter AS + SELECT -1 segid, relname, relfilenode FROM pg_class WHERE relname LIKE 'addcol%' + UNION SELECT gp_segment_id segid, relname, relfilenode FROM gp_dist_random('pg_class') + WHERE relname LIKE 'addcol%' ORDER BY segid; +-- table shouldn't be rewritten +SELECT count(*) FROM (SELECT * FROM relfilebefore UNION SELECT * FROM relfileafter)a; + count +------- + 4 +(1 row) + +-- data is intact +SELECT * FROM addcol; + i | j +---+--- + 2 | 5 + 3 | 5 + 4 | 5 + 5 | 5 + 1 | 5 +(5 rows) + diff --git a/src/test/regress/sql/alter_table_aocs2.sql b/src/test/regress/sql/alter_table_aocs2.sql index e96d9f0376..1312abf68e 100644 --- a/src/test/regress/sql/alter_table_aocs2.sql +++ b/src/test/regress/sql/alter_table_aocs2.sql @@ -611,3 +611,25 @@ ALTER TABLE subpartition_aoco_leaf ADD COLUMN new_col2 int DEFAULT 1, ALTER COLU SELECT * FROM subpartition_aoco_leaf; :chk_co_opt_qry; + +-- Check if add column doesn't rewrite the table +CREATE TABLE addcol(i int) WITH (appendonly=true, orientation=column); +INSERT INTO addcol SELECT generate_series(1, 5); + +CREATE TEMP TABLE relfilebefore AS + SELECT -1 segid, relname, relfilenode FROM pg_class WHERE relname LIKE 'addcol%' + UNION SELECT gp_segment_id segid, relname, relfilenode FROM gp_dist_random('pg_class') + WHERE relname LIKE 'addcol%' ORDER BY segid; + +ALTER TABLE addcol ADD COLUMN j int DEFAULT 5; + +CREATE TEMP TABLE relfileafter AS + SELECT -1 segid, relname, relfilenode FROM pg_class WHERE relname LIKE 'addcol%' + UNION SELECT gp_segment_id segid, relname, relfilenode FROM gp_dist_random('pg_class') + WHERE relname LIKE 'addcol%' ORDER BY segid; + +-- table shouldn't be rewritten +SELECT count(*) FROM (SELECT * FROM relfilebefore UNION SELECT * FROM relfileafter)a; + +-- data is intact +SELECT * FROM addcol; --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
