mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	Fix for dropped columns in a partitioned table's default partition
We forgot to map column numbers to/from the default partition for various operations, leading to valid cases failing with spurious errors, such as ERROR: attribute N of type some_partition has been dropped It was also possible that the search for conflicting rows in the default partition when attaching another partition would fail to detect some. Secondarily, it was also possible that such a search should be skipped (because the constraint was implied) but wasn't. Fix all this by mapping column numbers when necessary. Reported by: Daniel Wilches Author: Amit Langote Discussion: https://postgr.es/m/15873-8c61945d6b3ef87c@postgresql.org
This commit is contained in:
		@@ -2648,7 +2648,8 @@ DROP USER regress_alter_table_user1;
 | 
			
		||||
-- default partition
 | 
			
		||||
create table defpart_attach_test (a int) partition by list (a);
 | 
			
		||||
create table defpart_attach_test1 partition of defpart_attach_test for values in (1);
 | 
			
		||||
create table defpart_attach_test_d (like defpart_attach_test);
 | 
			
		||||
create table defpart_attach_test_d (b int, a int);
 | 
			
		||||
alter table defpart_attach_test_d drop b;
 | 
			
		||||
insert into defpart_attach_test_d values (1), (2);
 | 
			
		||||
 | 
			
		||||
-- error because its constraint as the default partition would be violated
 | 
			
		||||
@@ -2660,6 +2661,12 @@ alter table defpart_attach_test_d add check (a > 1);
 | 
			
		||||
-- should be attached successfully and without needing to be scanned
 | 
			
		||||
alter table defpart_attach_test attach partition defpart_attach_test_d default;
 | 
			
		||||
 | 
			
		||||
-- check that attaching a partition correctly reports any rows in the default
 | 
			
		||||
-- partition that should not be there for the new partition to be attached
 | 
			
		||||
-- successfully
 | 
			
		||||
create table defpart_attach_test_2 (like defpart_attach_test_d);
 | 
			
		||||
alter table defpart_attach_test attach partition defpart_attach_test_2 for values in (2);
 | 
			
		||||
 | 
			
		||||
drop table defpart_attach_test;
 | 
			
		||||
 | 
			
		||||
-- check combinations of temporary and permanent relations when attaching
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user