blob: ca4b4bece8dc2167f42e17fd985aaa4e92a40637 [file] [log] [blame]
-- https://github.com/greenplum-db/gpdb/issues/1109
--
-- ALTER TABLE ... SET WITH (REORGANIZE = true); should always redistribute the
-- data even with matching distribution policy
create table ats_dist_by_c (c int, d int) distributed by (c);
create table ats_dist_by_d (c int, d int) distributed by (d);
insert into ats_dist_by_c select i, 0 from generate_series(1, 47) i;
copy ats_dist_by_c to '/tmp/ats_dist_by_c<SEGID>' on segment;
-- load the data back from the segment file, but wrong distribution
set gp_enable_segment_copy_checking = false;
show gp_enable_segment_copy_checking;
gp_enable_segment_copy_checking
---------------------------------
off
(1 row)
copy ats_dist_by_d from '/tmp/ats_dist_by_c<SEGID>' on segment;
-- try to use the reorganize = true to fix it
alter table ats_dist_by_d set with (reorganize = true);
-- construct expected table
create table ats_expected_by_d (c int, d int) distributed by (d);
insert into ats_expected_by_d select * from ats_dist_by_c;
-- expect to see data distributed in the same way as the freshly constructed
-- table
select count(*) = 0 as has_same_distribution from
(select gp_segment_id, * from ats_dist_by_d except
select gp_segment_id, * from ats_expected_by_d) t;
has_same_distribution
-----------------------
t
(1 row)
-- reload for random distribution test
truncate table ats_dist_by_d;
copy ats_dist_by_d from '/tmp/ats_dist_by_c<SEGID>' on segment;
-- we expect the new random distribution to differ from both the
-- distributed-by-c table and the distributed-by-d table
alter table ats_dist_by_d set with (reorganize = true) distributed randomly;
select count(*) > 0 as has_different_distribution from
(select gp_segment_id, * from ats_dist_by_d except
select gp_segment_id, * from ats_dist_by_c) t;
has_different_distribution
----------------------------
t
(1 row)
select count(*) > 0 as has_different_distribution from
(select gp_segment_id, * from ats_dist_by_d except
select gp_segment_id, * from ats_expected_by_d) t;
has_different_distribution
----------------------------
t
(1 row)