Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 19 additions & 9 deletions src/backend/commands/tablecmds.c
Original file line number Diff line number Diff line change
Expand Up @@ -513,7 +513,9 @@ static void ATExecRebalanceTable(List **wqueue, Relation rel, AlterTableCmd *cmd

static void ATRepackTable(Relation origTable, AlteredTableInfo *tab);
static void ATExecExpandPartitionTablePrepare(Relation rel);
static void ATExecExpandTableCTAS(AlterTableCmd *rootCmd, Relation rel, AlterTableCmd *cmd);
static void ATExecRebalanceTableCTAS(AlterTableCmd *rootCmd,
Relation rel, AlterTableCmd *cmd,
int targetNumSegments);

static void ATExecSetDistributedBy(Relation rel, Node *node,
AlterTableCmd *cmd);
Expand Down Expand Up @@ -17513,7 +17515,7 @@ ATExecExpandTable(List **wqueue, Relation rel, AlterTableCmd *cmd)
}
else
{
ATExecExpandTableCTAS(rootCmd, rel, cmd);
ATExecRebalanceTableCTAS(rootCmd, rel, cmd, getgpsegmentCount());
}

/* Update numsegments to cluster size */
Expand Down Expand Up @@ -17651,11 +17653,6 @@ ATExecRebalanceTable(List **wqueue, Relation rel, AlterTableCmd *cmd)
* child partitions.
*/
}
else if (rel->rd_rel->relkind == RELKIND_MATVIEW)
{
ereport((Gp_role == GP_ROLE_EXECUTE) ? DEBUG1 : NOTICE,
(errmsg("Materialized view requires REFRESH after rebalance")));
}
else if (rel->rd_rel->relkind == RELKIND_FOREIGN_TABLE)
{
if (rel_is_external_table(relid))
Expand All @@ -17677,6 +17674,18 @@ ATExecRebalanceTable(List **wqueue, Relation rel, AlterTableCmd *cmd)
return;
}
}
else if (rel->rd_rel->relkind == RELKIND_MATVIEW)
{
/*
* We can't insert data directly to an existing matview,
* therefore the approach from ATExecShrinkTable() is not suitable,
* and we use CTAS method for matviews.
*/
AlteredTableInfo *tab = linitial(*wqueue);
AlterTableCmd *rootCmd =
(AlterTableCmd *)linitial(tab->subcmds[AT_PASS_MISC]);
ATExecRebalanceTableCTAS(rootCmd, rel, cmd, targetNumSegments);
}
else
{
ATExecShrinkTable(rel, newPolicy);
Expand Down Expand Up @@ -17778,7 +17787,8 @@ ATExecExpandPartitionTablePrepare(Relation rel)
}

static void
ATExecExpandTableCTAS(AlterTableCmd *rootCmd, Relation rel, AlterTableCmd *cmd)
ATExecRebalanceTableCTAS(AlterTableCmd *rootCmd, Relation rel,
AlterTableCmd *cmd, int targetNumSegments)
{
RangeVar *tmprv;
Oid tmprelid;
Expand Down Expand Up @@ -17817,7 +17827,7 @@ ATExecExpandTableCTAS(AlterTableCmd *rootCmd, Relation rel, AlterTableCmd *cmd)

/* Step (b) - build CTAS */
distby = make_distributedby_for_rel(rel);
distby->numsegments = getgpsegmentCount();
distby->numsegments = targetNumSegments;

queryDesc = build_ctas_with_dist(rel, distby,
untransformRelOptions(get_rel_opts(rel)),
Expand Down
4 changes: 0 additions & 4 deletions src/test/regress/expected/alter_rebalance.out
Original file line number Diff line number Diff line change
Expand Up @@ -3561,8 +3561,6 @@ insert into test_table select generate_series(1, 10);
create materialized view mv_test_table as select a from test_table distributed by (a);
alter table test_table rebalance 1;
alter materialized view mv_test_table rebalance 1;
NOTICE: Materialized view requires REFRESH after rebalance
refresh materialized view mv_test_table;
select count(1), gp_segment_id from test_table group by gp_segment_id;
count | gp_segment_id
-------+---------------
Expand Down Expand Up @@ -3600,8 +3598,6 @@ select count(1), gp_segment_id from mv_test_table group by gp_segment_id order b
begin;
alter table test_table rebalance 1;
alter materialized view mv_test_table rebalance 1;
NOTICE: Materialized view requires REFRESH after rebalance
refresh materialized view mv_test_table;
rollback;
select count(1), gp_segment_id from test_table group by gp_segment_id order by gp_segment_id;
count | gp_segment_id
Expand Down
2 changes: 0 additions & 2 deletions src/test/regress/sql/alter_rebalance.sql
Original file line number Diff line number Diff line change
Expand Up @@ -463,7 +463,6 @@ create materialized view mv_test_table as select a from test_table distributed b

alter table test_table rebalance 1;
alter materialized view mv_test_table rebalance 1;
refresh materialized view mv_test_table;

select count(1), gp_segment_id from test_table group by gp_segment_id;
select count(1), gp_segment_id from mv_test_table group by gp_segment_id;
Expand All @@ -483,7 +482,6 @@ select count(1), gp_segment_id from mv_test_table group by gp_segment_id order b
begin;
alter table test_table rebalance 1;
alter materialized view mv_test_table rebalance 1;
refresh materialized view mv_test_table;
rollback;

select count(1), gp_segment_id from test_table group by gp_segment_id order by gp_segment_id;
Expand Down
Loading