mirror of
https://github.com/postgres/postgres.git
synced 2025-12-07 12:02:30 +03:00
Add attisinherited column to pg_attribute; use it to guard against
column additions, deletions, and renames that would let a child table get out of sync with its parent. Patch by Alvaro Herrera, with some kibitzing by Tom Lane.
This commit is contained in:
@@ -1023,3 +1023,34 @@ select * from test;
|
||||
(3 rows)
|
||||
|
||||
drop table test;
|
||||
-- test inheritance
|
||||
create table dropColumn (a int, b int, e int);
|
||||
create table dropColumnChild (c int) inherits (dropColumn);
|
||||
create table dropColumnAnother (d int) inherits (dropColumnChild);
|
||||
-- these two should fail
|
||||
alter table dropColumnchild drop column a;
|
||||
ERROR: ALTER TABLE: Cannot drop inherited column "a"
|
||||
alter table only dropColumnChild drop column b;
|
||||
ERROR: ALTER TABLE: Cannot drop inherited column "b"
|
||||
-- these three should work
|
||||
alter table only dropColumn drop column e;
|
||||
alter table dropColumnChild drop column c;
|
||||
alter table dropColumn drop column a;
|
||||
create table renameColumn (a int);
|
||||
create table renameColumnChild (b int) inherits (renameColumn);
|
||||
create table renameColumnAnother (c int) inherits (renameColumnChild);
|
||||
-- these three should fail
|
||||
alter table renameColumnChild rename column a to d;
|
||||
ERROR: renameatt: inherited attribute "a" may not be renamed
|
||||
alter table only renameColumnChild rename column a to d;
|
||||
ERROR: Inherited attribute "a" must be renamed in child tables too
|
||||
alter table only renameColumn rename column a to d;
|
||||
ERROR: Inherited attribute "a" must be renamed in child tables too
|
||||
-- these should work
|
||||
alter table renameColumn rename column a to d;
|
||||
alter table renameColumnChild rename column b to a;
|
||||
-- this should work
|
||||
alter table renameColumn add column w int;
|
||||
-- this should fail
|
||||
alter table only renameColumn add column x int;
|
||||
ERROR: Attribute must be added to child tables too
|
||||
|
||||
@@ -731,3 +731,36 @@ copy test(b,c) from stdin;
|
||||
select * from test;
|
||||
drop table test;
|
||||
|
||||
-- test inheritance
|
||||
|
||||
create table dropColumn (a int, b int, e int);
|
||||
create table dropColumnChild (c int) inherits (dropColumn);
|
||||
create table dropColumnAnother (d int) inherits (dropColumnChild);
|
||||
|
||||
-- these two should fail
|
||||
alter table dropColumnchild drop column a;
|
||||
alter table only dropColumnChild drop column b;
|
||||
|
||||
-- these three should work
|
||||
alter table only dropColumn drop column e;
|
||||
alter table dropColumnChild drop column c;
|
||||
alter table dropColumn drop column a;
|
||||
|
||||
create table renameColumn (a int);
|
||||
create table renameColumnChild (b int) inherits (renameColumn);
|
||||
create table renameColumnAnother (c int) inherits (renameColumnChild);
|
||||
|
||||
-- these three should fail
|
||||
alter table renameColumnChild rename column a to d;
|
||||
alter table only renameColumnChild rename column a to d;
|
||||
alter table only renameColumn rename column a to d;
|
||||
|
||||
-- these should work
|
||||
alter table renameColumn rename column a to d;
|
||||
alter table renameColumnChild rename column b to a;
|
||||
|
||||
-- this should work
|
||||
alter table renameColumn add column w int;
|
||||
|
||||
-- this should fail
|
||||
alter table only renameColumn add column x int;
|
||||
|
||||
Reference in New Issue
Block a user