| -- |
| -- CREATE_MISC |
| -- |
| -- |
| -- a is the type root |
| -- b and c inherit from a (one-level single inheritance) |
| -- d inherits from b and c (two-level multiple inheritance) |
| -- e inherits from c (two-level single inheritance) |
| -- f inherits from e (three-level single inheritance) |
| -- |
| CREATE TABLE a_star ( |
| class char, |
| a int4 |
| ); |
| CREATE TABLE b_star ( |
| b text |
| ) INHERITS (a_star); |
| CREATE TABLE c_star ( |
| c name |
| ) INHERITS (a_star); |
| CREATE TABLE d_star ( |
| d float8 |
| ) INHERITS (b_star, c_star); |
| NOTICE: merging multiple inherited definitions of column "class" |
| NOTICE: merging multiple inherited definitions of column "a" |
| CREATE TABLE e_star ( |
| e int2 |
| ) INHERITS (c_star); |
| CREATE TABLE f_star ( |
| f polygon |
| ) INHERITS (e_star); |
| INSERT INTO a_star (class, a) VALUES ('a', 1); |
| INSERT INTO a_star (class, a) VALUES ('a', 2); |
| INSERT INTO a_star (class) VALUES ('a'); |
| INSERT INTO b_star (class, a, b) VALUES ('b', 3, 'mumble'::text); |
| INSERT INTO b_star (class, a) VALUES ('b', 4); |
| INSERT INTO b_star (class, b) VALUES ('b', 'bumble'::text); |
| INSERT INTO b_star (class) VALUES ('b'); |
| INSERT INTO c_star (class, a, c) VALUES ('c', 5, 'hi mom'::name); |
| INSERT INTO c_star (class, a) VALUES ('c', 6); |
| INSERT INTO c_star (class, c) VALUES ('c', 'hi paul'::name); |
| INSERT INTO c_star (class) VALUES ('c'); |
| INSERT INTO d_star (class, a, b, c, d) |
| VALUES ('d', 7, 'grumble'::text, 'hi sunita'::name, '0.0'::float8); |
| INSERT INTO d_star (class, a, b, c) |
| VALUES ('d', 8, 'stumble'::text, 'hi koko'::name); |
| INSERT INTO d_star (class, a, b, d) |
| VALUES ('d', 9, 'rumble'::text, '1.1'::float8); |
| INSERT INTO d_star (class, a, c, d) |
| VALUES ('d', 10, 'hi kristin'::name, '10.01'::float8); |
| INSERT INTO d_star (class, b, c, d) |
| VALUES ('d', 'crumble'::text, 'hi boris'::name, '100.001'::float8); |
| INSERT INTO d_star (class, a, b) |
| VALUES ('d', 11, 'fumble'::text); |
| INSERT INTO d_star (class, a, c) |
| VALUES ('d', 12, 'hi avi'::name); |
| INSERT INTO d_star (class, a, d) |
| VALUES ('d', 13, '1000.0001'::float8); |
| INSERT INTO d_star (class, b, c) |
| VALUES ('d', 'tumble'::text, 'hi andrew'::name); |
| INSERT INTO d_star (class, b, d) |
| VALUES ('d', 'humble'::text, '10000.00001'::float8); |
| INSERT INTO d_star (class, c, d) |
| VALUES ('d', 'hi ginger'::name, '100000.000001'::float8); |
| INSERT INTO d_star (class, a) VALUES ('d', 14); |
| INSERT INTO d_star (class, b) VALUES ('d', 'jumble'::text); |
| INSERT INTO d_star (class, c) VALUES ('d', 'hi jolly'::name); |
| INSERT INTO d_star (class, d) VALUES ('d', '1000000.0000001'::float8); |
| INSERT INTO d_star (class) VALUES ('d'); |
| INSERT INTO e_star (class, a, c, e) |
| VALUES ('e', 15, 'hi carol'::name, '-1'::int2); |
| INSERT INTO e_star (class, a, c) |
| VALUES ('e', 16, 'hi bob'::name); |
| INSERT INTO e_star (class, a, e) |
| VALUES ('e', 17, '-2'::int2); |
| INSERT INTO e_star (class, c, e) |
| VALUES ('e', 'hi michelle'::name, '-3'::int2); |
| INSERT INTO e_star (class, a) |
| VALUES ('e', 18); |
| INSERT INTO e_star (class, c) |
| VALUES ('e', 'hi elisa'::name); |
| INSERT INTO e_star (class, e) |
| VALUES ('e', '-4'::int2); |
| INSERT INTO f_star (class, a, c, e, f) |
| VALUES ('f', 19, 'hi claire'::name, '-5'::int2, '(1,3),(2,4)'::polygon); |
| INSERT INTO f_star (class, a, c, e) |
| VALUES ('f', 20, 'hi mike'::name, '-6'::int2); |
| INSERT INTO f_star (class, a, c, f) |
| VALUES ('f', 21, 'hi marcel'::name, '(11,44),(22,55),(33,66)'::polygon); |
| INSERT INTO f_star (class, a, e, f) |
| VALUES ('f', 22, '-7'::int2, '(111,555),(222,666),(333,777),(444,888)'::polygon); |
| INSERT INTO f_star (class, c, e, f) |
| VALUES ('f', 'hi keith'::name, '-8'::int2, |
| '(1111,3333),(2222,4444)'::polygon); |
| INSERT INTO f_star (class, a, c) |
| VALUES ('f', 24, 'hi marc'::name); |
| INSERT INTO f_star (class, a, e) |
| VALUES ('f', 25, '-9'::int2); |
| INSERT INTO f_star (class, a, f) |
| VALUES ('f', 26, '(11111,33333),(22222,44444)'::polygon); |
| INSERT INTO f_star (class, c, e) |
| VALUES ('f', 'hi allison'::name, '-10'::int2); |
| INSERT INTO f_star (class, c, f) |
| VALUES ('f', 'hi jeff'::name, |
| '(111111,333333),(222222,444444)'::polygon); |
| INSERT INTO f_star (class, e, f) |
| VALUES ('f', '-11'::int2, '(1111111,3333333),(2222222,4444444)'::polygon); |
| INSERT INTO f_star (class, a) VALUES ('f', 27); |
| INSERT INTO f_star (class, c) VALUES ('f', 'hi carl'::name); |
| INSERT INTO f_star (class, e) VALUES ('f', '-12'::int2); |
| INSERT INTO f_star (class, f) |
| VALUES ('f', '(11111111,33333333),(22222222,44444444)'::polygon); |
| INSERT INTO f_star (class) VALUES ('f'); |
| -- Analyze the X_star tables for better plan stability in later tests |
| ANALYZE a_star; |
| ANALYZE b_star; |
| ANALYZE c_star; |
| ANALYZE d_star; |
| ANALYZE e_star; |
| ANALYZE f_star; |
| -- |
| -- inheritance stress test |
| -- |
| SELECT * FROM a_star*; |
| class | a |
| -------+---- |
| a | 1 |
| a | 2 |
| a | |
| b | 3 |
| b | 4 |
| b | |
| b | |
| c | 5 |
| c | 6 |
| c | |
| c | |
| d | 7 |
| d | 8 |
| d | 9 |
| d | 10 |
| d | |
| d | 11 |
| d | 12 |
| d | 13 |
| d | |
| d | |
| d | |
| d | 14 |
| d | |
| d | |
| d | |
| d | |
| e | 15 |
| e | 16 |
| e | 17 |
| e | |
| e | 18 |
| e | |
| e | |
| f | 19 |
| f | 20 |
| f | 21 |
| f | 22 |
| f | |
| f | 24 |
| f | 25 |
| f | 26 |
| f | |
| f | |
| f | |
| f | 27 |
| f | |
| f | |
| f | |
| f | |
| (50 rows) |
| |
| SELECT * |
| FROM b_star* x |
| WHERE x.b = text 'bumble' or x.a < 3; |
| class | a | b |
| -------+---+-------- |
| b | | bumble |
| (1 row) |
| |
| SELECT class, a |
| FROM c_star* x |
| WHERE x.c ~ text 'hi'; |
| class | a |
| -------+---- |
| c | 5 |
| c | |
| d | 7 |
| d | 8 |
| d | 10 |
| d | |
| d | 12 |
| d | |
| d | |
| d | |
| e | 15 |
| e | 16 |
| e | |
| e | |
| f | 19 |
| f | 20 |
| f | 21 |
| f | |
| f | 24 |
| f | |
| f | |
| f | |
| (22 rows) |
| |
| SELECT class, b, c |
| FROM d_star* x |
| WHERE x.a < 100; |
| class | b | c |
| -------+---------+------------ |
| d | grumble | hi sunita |
| d | stumble | hi koko |
| d | rumble | |
| d | | hi kristin |
| d | fumble | |
| d | | hi avi |
| d | | |
| d | | |
| (8 rows) |
| |
| SELECT class, c FROM e_star* x WHERE x.c NOTNULL; |
| class | c |
| -------+------------- |
| e | hi carol |
| e | hi bob |
| e | hi michelle |
| e | hi elisa |
| f | hi claire |
| f | hi mike |
| f | hi marcel |
| f | hi keith |
| f | hi marc |
| f | hi allison |
| f | hi jeff |
| f | hi carl |
| (12 rows) |
| |
| SELECT * FROM f_star* x WHERE x.c ISNULL; |
| class | a | c | e | f |
| -------+----+---+-----+------------------------------------------- |
| f | 22 | | -7 | ((111,555),(222,666),(333,777),(444,888)) |
| f | 25 | | -9 | |
| f | 26 | | | ((11111,33333),(22222,44444)) |
| f | | | -11 | ((1111111,3333333),(2222222,4444444)) |
| f | 27 | | | |
| f | | | -12 | |
| f | | | | ((11111111,33333333),(22222222,44444444)) |
| f | | | | |
| (8 rows) |
| |
| -- grouping and aggregation on inherited sets have been busted in the past... |
| SELECT sum(a) FROM a_star*; |
| sum |
| ----- |
| 355 |
| (1 row) |
| |
| SELECT class, sum(a) FROM a_star* GROUP BY class ORDER BY class; |
| class | sum |
| -------+----- |
| a | 3 |
| b | 7 |
| c | 11 |
| d | 84 |
| e | 66 |
| f | 184 |
| (6 rows) |
| |
| ALTER TABLE f_star RENAME COLUMN f TO ff; |
| ALTER TABLE e_star* RENAME COLUMN e TO ee; |
| ALTER TABLE d_star* RENAME COLUMN d TO dd; |
| ALTER TABLE c_star* RENAME COLUMN c TO cc; |
| ALTER TABLE b_star* RENAME COLUMN b TO bb; |
| ALTER TABLE a_star* RENAME COLUMN a TO aa; |
| SELECT class, aa |
| FROM a_star* x |
| WHERE aa ISNULL; |
| class | aa |
| -------+---- |
| a | |
| b | |
| b | |
| c | |
| c | |
| d | |
| d | |
| d | |
| d | |
| d | |
| d | |
| d | |
| d | |
| e | |
| e | |
| e | |
| f | |
| f | |
| f | |
| f | |
| f | |
| f | |
| f | |
| f | |
| (24 rows) |
| |
| -- As of Postgres 7.1, ALTER implicitly recurses, |
| -- so this should be same as ALTER a_star* |
| ALTER TABLE a_star RENAME COLUMN aa TO foo; |
| SELECT class, foo |
| FROM a_star* x |
| WHERE x.foo >= 2; |
| class | foo |
| -------+----- |
| a | 2 |
| b | 3 |
| b | 4 |
| c | 5 |
| c | 6 |
| d | 7 |
| d | 8 |
| d | 9 |
| d | 10 |
| d | 11 |
| d | 12 |
| d | 13 |
| d | 14 |
| e | 15 |
| e | 16 |
| e | 17 |
| e | 18 |
| f | 19 |
| f | 20 |
| f | 21 |
| f | 22 |
| f | 24 |
| f | 25 |
| f | 26 |
| f | 27 |
| (25 rows) |
| |
| ALTER TABLE a_star RENAME COLUMN foo TO aa; |
| SELECT * |
| from a_star* |
| WHERE aa < 1000; |
| class | aa |
| -------+---- |
| a | 1 |
| a | 2 |
| b | 3 |
| b | 4 |
| c | 5 |
| c | 6 |
| d | 7 |
| d | 8 |
| d | 9 |
| d | 10 |
| d | 11 |
| d | 12 |
| d | 13 |
| d | 14 |
| e | 15 |
| e | 16 |
| e | 17 |
| e | 18 |
| f | 19 |
| f | 20 |
| f | 21 |
| f | 22 |
| f | 24 |
| f | 25 |
| f | 26 |
| f | 27 |
| (26 rows) |
| |
| ALTER TABLE f_star ADD COLUMN f int4; |
| UPDATE f_star SET f = 10; |
| ALTER TABLE e_star* ADD COLUMN e int4; |
| --UPDATE e_star* SET e = 42; |
| SELECT * FROM e_star*; |
| class | aa | cc | ee | e |
| -------+----+-------------+-----+--- |
| e | 15 | hi carol | -1 | |
| e | 16 | hi bob | | |
| e | 17 | | -2 | |
| e | | hi michelle | -3 | |
| e | 18 | | | |
| e | | hi elisa | | |
| e | | | -4 | |
| f | 19 | hi claire | -5 | |
| f | 20 | hi mike | -6 | |
| f | 21 | hi marcel | | |
| f | 22 | | -7 | |
| f | | hi keith | -8 | |
| f | 24 | hi marc | | |
| f | 25 | | -9 | |
| f | 26 | | | |
| f | | hi allison | -10 | |
| f | | hi jeff | | |
| f | | | -11 | |
| f | 27 | | | |
| f | | hi carl | | |
| f | | | -12 | |
| f | | | | |
| f | | | | |
| (23 rows) |
| |
| ALTER TABLE a_star* ADD COLUMN a text; |
| NOTICE: merging definition of column "a" for child "d_star" |
| -- That ALTER TABLE should have added TOAST tables. |
| SELECT relname, reltoastrelid <> 0 AS has_toast_table |
| FROM pg_class |
| WHERE oid::regclass IN ('a_star', 'c_star') |
| ORDER BY 1; |
| relname | has_toast_table |
| ---------+----------------- |
| a_star | t |
| c_star | t |
| (2 rows) |
| |
| --UPDATE b_star* |
| -- SET a = text 'gazpacho' |
| -- WHERE aa > 4; |
| SELECT class, aa, a FROM a_star*; |
| class | aa | a |
| -------+----+--- |
| a | 1 | |
| a | 2 | |
| a | | |
| b | 3 | |
| b | 4 | |
| b | | |
| b | | |
| c | 5 | |
| c | 6 | |
| c | | |
| c | | |
| d | 7 | |
| d | 8 | |
| d | 9 | |
| d | 10 | |
| d | | |
| d | 11 | |
| d | 12 | |
| d | 13 | |
| d | | |
| d | | |
| d | | |
| d | 14 | |
| d | | |
| d | | |
| d | | |
| d | | |
| e | 15 | |
| e | 16 | |
| e | 17 | |
| e | | |
| e | 18 | |
| e | | |
| e | | |
| f | 19 | |
| f | 20 | |
| f | 21 | |
| f | 22 | |
| f | | |
| f | 24 | |
| f | 25 | |
| f | 26 | |
| f | | |
| f | | |
| f | | |
| f | 27 | |
| f | | |
| f | | |
| f | | |
| f | | |
| (50 rows) |
| |