* ATTypedTableRecursion
*
* Propagate ALTER TYPE operations to the typed tables of that type.
- * Also check the RESTRICT/CASCADE behavior.
+ * Also check the RESTRICT/CASCADE behavior. Given CASCADE, also permit
+ * recursion to inheritance children of the typed tables.
*/
static void
ATTypedTableRecursion(List **wqueue, Relation rel, AlterTableCmd *cmd,
childrel = relation_open(childrelid, lockmode);
CheckTableNotInUse(childrel, "ALTER TABLE");
- ATPrepCmd(wqueue, childrel, cmd, false, true, lockmode);
+ ATPrepCmd(wqueue, childrel, cmd, true, true, lockmode);
relation_close(childrel, NoLock);
}
}
ERROR: cannot alter type "test_type1" because column "test_tbl1"."y" uses it
CREATE TYPE test_type2 AS (a int, b text);
CREATE TABLE test_tbl2 OF test_type2;
+CREATE TABLE test_tbl2_subclass () INHERITS (test_tbl2);
\d test_type2
Composite type "public.test_type2"
Column | Type | Modifiers
--------+---------+-----------
a | integer |
b | text |
+Number of child tables: 1 (Use \d+ to list them.)
Typed table of type: test_type2
ALTER TYPE test_type2 ADD ATTRIBUTE c text; -- fails
a | integer |
b | text |
c | text |
+Number of child tables: 1 (Use \d+ to list them.)
Typed table of type: test_type2
ALTER TYPE test_type2 ALTER ATTRIBUTE b TYPE varchar; -- fails
a | integer |
b | character varying |
c | text |
+Number of child tables: 1 (Use \d+ to list them.)
Typed table of type: test_type2
ALTER TYPE test_type2 DROP ATTRIBUTE b; -- fails
--------+---------+-----------
a | integer |
c | text |
+Number of child tables: 1 (Use \d+ to list them.)
Typed table of type: test_type2
ALTER TYPE test_type2 RENAME ATTRIBUTE a TO aa; -- fails
--------+---------+-----------
aa | integer |
c | text |
+Number of child tables: 1 (Use \d+ to list them.)
Typed table of type: test_type2
+\d test_tbl2_subclass
+Table "public.test_tbl2_subclass"
+ Column | Type | Modifiers
+--------+---------+-----------
+ aa | integer |
+ c | text |
+Inherits: test_tbl2
+
+DROP TABLE test_tbl2_subclass;
CREATE TYPE test_type_empty AS ();
DROP TYPE test_type_empty;
--
CREATE TYPE test_type2 AS (a int, b text);
CREATE TABLE test_tbl2 OF test_type2;
+CREATE TABLE test_tbl2_subclass () INHERITS (test_tbl2);
\d test_type2
\d test_tbl2
ALTER TYPE test_type2 RENAME ATTRIBUTE a TO aa CASCADE;
\d test_type2
\d test_tbl2
+\d test_tbl2_subclass
+
+DROP TABLE test_tbl2_subclass;
CREATE TYPE test_type_empty AS ();
DROP TYPE test_type_empty;