| # ALTER TABLE - Add and remove inheritance with concurrent reads |
| |
| setup |
| { |
| CREATE TABLE p (a integer); |
| INSERT INTO p VALUES(1); |
| CREATE TABLE c1 () INHERITS (p); |
| INSERT INTO c1 VALUES(10); |
| CREATE TABLE c2 (a integer); |
| INSERT INTO c2 VALUES(100); |
| |
| -- GPDB: cannot alter column 'a' if it's the distribution key |
| alter table p set distributed randomly; |
| } |
| |
| teardown |
| { |
| DROP TABLE IF EXISTS c1, c2, p; |
| } |
| |
| session s1 |
| step s1b { BEGIN; } |
| step s1delc1 { ALTER TABLE c1 NO INHERIT p; } |
| step s1modc1a { ALTER TABLE c1 ALTER COLUMN a TYPE float; } |
| step s1addc2 { ALTER TABLE c2 INHERIT p; } |
| step s1dropc1 { DROP TABLE c1; } |
| step s1c { COMMIT; } |
| |
| session s2 |
| step s2sel { SELECT SUM(a) FROM p; } |
| |
| # NO INHERIT will not be visible to concurrent select, |
| # since we identify children before locking them |
| permutation s1b s1delc1 s2sel s1c s2sel |
| # adding inheritance likewise is not seen if s1 commits after s2 locks p |
| permutation s1b s1delc1 s1addc2 s2sel s1c s2sel |
| # but we do cope with DROP on a child table |
| permutation s1b s1dropc1 s2sel s1c s2sel |
| # this case currently results in an error; doesn't seem worth preventing |
| permutation s1b s1delc1 s1modc1a s2sel s1c s2sel |