mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-09-30 09:11:23 +02:00
44 lines
1.9 KiB
RPMSpec
44 lines
1.9 KiB
RPMSpec
|
# Verify that default partition constraint is enforced correctly
|
||
|
# in light of partitions being added concurrently to its parent
|
||
|
setup {
|
||
|
drop table if exists tpart;
|
||
|
create table tpart(i int, j text) partition by range(i);
|
||
|
create table tpart_1(like tpart);
|
||
|
create table tpart_2(like tpart);
|
||
|
create table tpart_default (a int, j text, i int) partition by list (j);
|
||
|
create table tpart_default_default (a int, i int, b int, j text);
|
||
|
alter table tpart_default_default drop b;
|
||
|
alter table tpart_default attach partition tpart_default_default default;
|
||
|
alter table tpart_default drop a;
|
||
|
alter table tpart attach partition tpart_default default;
|
||
|
alter table tpart attach partition tpart_1 for values from(0) to (100);
|
||
|
insert into tpart_2 values (110,'xxx'), (120, 'yyy'), (150, 'zzz');
|
||
|
}
|
||
|
|
||
|
session "s1"
|
||
|
step "s1b" { begin; }
|
||
|
step "s1a" { alter table tpart attach partition tpart_2 for values from (100) to (200); }
|
||
|
step "s1c" { commit; }
|
||
|
|
||
|
session "s2"
|
||
|
step "s2b" { begin; }
|
||
|
step "s2i" { insert into tpart values (110,'xxx'), (120, 'yyy'), (150, 'zzz'); }
|
||
|
step "s2i2" { insert into tpart_default (i, j) values (110, 'xxx'), (120, 'yyy'), (150, 'zzz'); }
|
||
|
step "s2c" { commit; }
|
||
|
step "s2s" { select tableoid::regclass, * from tpart; }
|
||
|
|
||
|
teardown { drop table tpart; }
|
||
|
|
||
|
# insert into tpart by s2 which routes to tpart_default due to not seeing
|
||
|
# concurrently added tpart_2 should fail, because the partition constraint
|
||
|
# of tpart_default would have changed due to tpart_2 having been added
|
||
|
permutation "s1b" "s1a" "s2b" "s2i" "s1c" "s2c" "s2s"
|
||
|
|
||
|
# similar to above, but now insert into sub-partitioned tpart_default
|
||
|
permutation "s1b" "s1a" "s2b" "s2i2" "s1c" "s2c" "s2s"
|
||
|
|
||
|
# reverse: now the insert into tpart_default by s2 occurs first followed by
|
||
|
# attach in s1, which should fail when it scans the leaf default partition
|
||
|
# find the violating rows
|
||
|
permutation "s1b" "s2b" "s2i" "s1a" "s2c" "s1c" "s2s"
|