| -- |
| -- testing that constraint types that are backed by indices(UNIQUE, PRIMARY KEY, |
| -- EXCLUSION) have constraint names that match the name of their corresponding |
| -- indices. This file covers partition tables only, and covers all mechanisms |
| -- of DDL use of partition tables(EXCHANGE, ADD PARTITION, CREATE, etc). We do |
| -- so for a TWO LEVEL(root and leaf) hierarchy and a THREE LEVEL hierarchy |
| -- |
| -- We also add test here for partitioned indices. Logically, these are more |
| -- or less tested via index-backed constraints, but it is a different DDL so |
| -- we have to assume as testers that the server code paths are different. |
| -- |
| -- we have our test cases here, but the expected file contains the desired |
| -- outcomes. In other words, we do not validate the results here but do so |
| -- in the expected file. |
| DROP schema IF EXISTS index_constraint_naming_partition cascade; |
| NOTICE: schema "index_constraint_naming_partition" does not exist, skipping |
| CREATE schema index_constraint_naming_partition; |
| SET search_path='index_constraint_naming_partition'; |
| DROP FUNCTION IF EXISTS partition_tables(text); |
| NOTICE: function partition_tables(text) does not exist, skipping |
| CREATE FUNCTION partition_tables(tab text) RETURNS TABLE(partition_name regclass, parent_name regclass, root_name regclass) |
| LANGUAGE SQL STABLE STRICT AS $fn$ |
| SELECT relid, parentrelid, pg_partition_root(relid) FROM pg_partition_tree(tab); |
| $fn$; |
| DROP FUNCTION IF EXISTS constraints_and_indices(); |
| NOTICE: function constraints_and_indices() does not exist, skipping |
| CREATE FUNCTION constraints_and_indices() RETURNS TABLE(table_name regclass, constraint_name name, index_name regclass, constraint_type char, connspoid OID) |
| LANGUAGE SQL STABLE STRICT AS $fn$ |
| SELECT |
| con.conrelid::regclass, |
| con.conname, |
| con.conindid::regclass, |
| con.contype::char, |
| con.connamespace |
| FROM |
| pg_constraint con |
| WHERE |
| con.contype != 'c' |
| ORDER BY conrelid |
| ; |
| $fn$; |
| --displays all dependencies and their types |
| DROP FUNCTION IF EXISTS dependencies(); |
| NOTICE: function dependencies() does not exist, skipping |
| CREATE FUNCTION dependencies() RETURNS TABLE( depname NAME, classtype "char", depnsoid OID, |
| refname NAME, refclasstype "char", refnsoid OID, |
| classid REGCLASS, objid OID, objsubid INTEGER, |
| refclassid REGCLASS, refobjid OID, refobjsubid OID, deptype "char" ) |
| LANGUAGE SQL STABLE STRICT AS $fn$ |
| WITH RECURSIVE |
| w AS ( |
| SELECT classid::regclass, |
| objid, |
| objsubid, |
| refclassid::regclass, |
| refobjid, |
| refobjsubid, |
| deptype |
| FROM pg_depend d |
| WHERE classid IN ('pg_constraint'::regclass, 'pg_class'::regclass) |
| AND (objid > 16384 OR refobjid > 16384) |
| |
| UNION |
| |
| SELECT d2.* |
| FROM w |
| INNER JOIN pg_depend d2 |
| ON (w.refclassid, w.refobjid, w.refobjsubid) = |
| (d2.classid, d2.objid, d2.objsubid) |
| ) |
| SELECT COALESCE(con.conname, c.relname, t.typname, nsp.nspname) AS depname, |
| COALESCE(con.contype, c.relkind, '-') as classtype, |
| COALESCE(con.connamespace, c.relnamespace, t.typnamespace, nsp.oid) as depnsoid, |
| COALESCE(con2.conname, c2.relname, t2.typname, nsp2.nspname) AS refname, |
| COALESCE(con2.contype, c2.relkind, '-') as refclasstype, |
| COALESCE(con2.connamespace, c2.relnamespace, t2.typnamespace, nsp2.oid) as refnsoid, |
| w.* |
| FROM w |
| LEFT JOIN pg_constraint con |
| ON classid = 'pg_constraint'::regclass AND objid = con.oid |
| LEFT JOIN pg_class c ON classid = 'pg_class'::regclass AND objid = c.oid |
| LEFT JOIN pg_type t ON classid = 'pg_type'::regclass AND objid = t.oid |
| LEFT JOIN pg_namespace nsp |
| ON classid = 'pg_namespace'::regclass AND objid = nsp.oid |
| |
| LEFT JOIN pg_constraint con2 |
| ON refclassid = 'pg_constraint'::regclass AND |
| refobjid = con2.oid |
| LEFT JOIN pg_class c2 |
| ON refclassid = 'pg_class'::regclass AND refobjid = c2.oid AND c2.relkind NOT IN ('p', 'I') |
| LEFT JOIN pg_type t2 |
| ON refclassid = 'pg_type'::regclass AND refobjid = t2.oid |
| LEFT JOIN pg_namespace nsp2 ON refclassid = 'pg_namespace'::regclass AND |
| refobjid = nsp2.oid |
| ; |
| $fn$; |
| --dependencies() table but with namespace name instead of namespace oid |
| DROP FUNCTION IF EXISTS dependencies_nsname(); |
| NOTICE: function dependencies_nsname() does not exist, skipping |
| CREATE FUNCTION dependencies_nsname() RETURNS TABLE(depname NAME, classtype "char", depnsname NAME, |
| refname NAME, refclasstype "char", refnsname NAME, |
| classid REGCLASS, objsubid INTEGER, |
| refclassid REGCLASS, refobjsubid OID, deptype "char") |
| LANGUAGE SQL STABLE STRICT AS $fn$ |
| SELECT t.depname, t.classtype, nsp.nspname as depnsame, t.refname, t.refclasstype, |
| nsp2.nspname as refnsname, t.classid, t.objsubid, t.refclassid, t.refobjsubid, t.deptype |
| FROM |
| (SELECT depname, classtype, depnsoid, refname, refclasstype, refnsoid, |
| classid, objsubid, refclassid, refobjsubid, deptype |
| FROM dependencies() |
| WHERE |
| (refclassid='pg_class'::REGCLASS OR refclassid='pg_constraint'::REGCLASS) AND (classtype!='c') |
| AND (NOT (classtype='r' AND classid='pg_class'::REGCLASS AND refclasstype='r' AND refclassid='pg_class'::REGCLASS)) |
| ) as t |
| JOIN pg_namespace nsp ON t.depnsoid=nsp.oid |
| JOIN pg_namespace nsp2 ON t.refnsoid=nsp2.oid; |
| $fn$; |
| DROP FUNCTION IF EXISTS partition_tables_show_all(text); |
| NOTICE: function partition_tables_show_all(text) does not exist, skipping |
| CREATE FUNCTION partition_tables_show_all(tab text) RETURNS TABLE(partition_name regclass, parent_name regclass, root_name regclass, constraint_name name, index_name name, constraint_type char) |
| --connspname NAME) --, deptype "char") |
| LANGUAGE SQL STABLE STRICT AS $fn$ |
| SELECT p.partition_name, p.parent_name, p.root_name, c.constraint_name, c.index_name, c.constraint_type --nsp.nspname --, d.deptype |
| FROM |
| (SELECT partition_name, parent_name, root_name FROM partition_tables(tab)) as p |
| LEFT JOIN |
| (SELECT table_name, constraint_name, CAST(index_name as name), constraint_type, connspoid from constraints_and_indices()) as c |
| ON p.partition_name::name = CAST(c.table_name as name) |
| JOIN pg_class as pgc ON p.root_name::name=pgc.relname --find root_name's namespace name |
| JOIN pg_namespace as nsp |
| ON pgc.relnamespace=nsp.oid WHERE nsp.nspname='index_constraint_naming_partition' |
| ORDER BY p.partition_name::name, p.parent_name::name, p.root_name::name, c.constraint_name, c.index_name, c.constraint_type; --make sure output is stabely ordered for pg_regress |
| |
| $fn$; |
| DROP FUNCTION IF EXISTS dependencies_show_for_idx(); |
| NOTICE: function dependencies_show_for_idx() does not exist, skipping |
| CREATE FUNCTION dependencies_show_for_idx() RETURNS TABLE(depname name, refname name, depType "char") |
| LANGUAGE SQL STABLE STRICT AS $fn$ |
| SELECT t.depname, t.refname, t.deptype FROM |
| (SELECT depname, depnsname, refname, refnsname, deptype |
| FROM dependencies_nsname() |
| WHERE |
| ((depname LIKE '%idx%') OR (refname LIKE '%idx%')) |
| AND (depnsname='index_constraint_naming_partition' AND refnsname='index_constraint_naming_partition')) as t |
| ORDER BY t.depname, t.refname, t.deptype; --make sure output is stabely ordered for pg_regress |
| $fn$; |
| --return all dependencies of interest here... |
| DROP FUNCTION IF EXISTS dependencies_show_for_cons_idx(); |
| NOTICE: function dependencies_show_for_cons_idx() does not exist, skipping |
| CREATE FUNCTION dependencies_show_for_cons_idx() RETURNS TABLE(depname NAME, classtype "char", |
| refname NAME, refclasstype "char", classid REGCLASS, objsubid INTEGER, |
| refclassid REGCLASS, refobjsubid OID, deptype "char") |
| LANGUAGE SQL STABLE STRICT AS $fn$ |
| SELECT t.depname, t.classtype, t.refname, t.refclasstype, t.classid, t.objsubid, t.refclassid, t.refobjsubid, t.deptype FROM |
| (SELECT depname, classtype, depnsname, refname, refclasstype, refnsname, classid, objsubid, refclassid, refobjsubid, deptype FROM dependencies_nsname() WHERE |
| (refclassid='pg_class'::REGCLASS OR refclassid='pg_constraint'::REGCLASS) AND (classtype!='c') |
| AND (NOT (classtype='r' AND classid='pg_class'::REGCLASS AND refclasstype='r' AND refclassid='pg_class'::REGCLASS)) |
| AND (depnsname='index_constraint_naming_partition' AND refnsname='index_constraint_naming_partition')) as t |
| ORDER BY t.classtype, t.refclasstype, t.deptype, t.depname, t.refname, t.classid, t.objsubid, t.refclassid, t.refobjsubid; --make sure output is stabely ordered for pg_regress |
| $fn$; |
| --return all dependencies of interest here... |
| --############################ TWO LEVEL ################################## |
| DROP FUNCTION IF EXISTS recreate_two_level_table(); |
| NOTICE: function recreate_two_level_table() does not exist, skipping |
| CREATE FUNCTION recreate_two_level_table() RETURNS VOID |
| LANGUAGE SQL VOLATILE STRICT AS $fn$ |
| DROP TABLE IF EXISTS r; |
| CREATE TABLE r ( |
| r_key INTEGER NOT NULL, |
| r_name CHAR(25) |
| ) |
| DISTRIBUTED BY (r_key) |
| PARTITION BY range (r_key) |
| ( |
| PARTITION r1 START (0), |
| PARTITION r2 START (5) END (8) |
| ); |
| $fn$; |
| -- validate that there are no constraints when we start |
| SELECT * FROM partition_tables_show_all('r'); |
| ERROR: relation "r" does not exist |
| CONTEXT: SQL function "partition_tables" statement 1 |
| SQL function "partition_tables_show_all" statement 1 |
| -- UNIQUE constraint: validate we correctly add it and can only drop from root |
| SELECT recreate_two_level_table(); |
| NOTICE: table "r" does not exist, skipping |
| recreate_two_level_table |
| -------------------------- |
| |
| (1 row) |
| |
| ALTER TABLE r ADD UNIQUE(r_key,r_name); |
| SELECT * FROM dependencies_show_for_cons_idx(); |
| depname | classtype | refname | refclasstype | classid | objsubid | refclassid | refobjsubid | deptype |
| -----------------------------+-----------+-----------------------------+--------------+---------------+----------+---------------+-------------+--------- |
| r_r_key_r_name_key | I | r_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1 | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_r_key_r_name_key | i | r_1_prt_r2 | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_r_key_r_name_key | i | r_1_prt_r2_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key | u | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_r_key_r_name_key | u | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r1_r_key_r_name_key | u | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key | u | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_r_key_r_name_key | u | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r2_r_key_r_name_key | u | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| (13 rows) |
| |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| ----------------+-------------+-----------+-----------------------------+-----------------------------+----------------- |
| r | | r | r_r_key_r_name_key | r_r_key_r_name_key | u |
| r_1_prt_r1 | r | r | r_1_prt_r1_r_key_r_name_key | r_1_prt_r1_r_key_r_name_key | u |
| r_1_prt_r2 | r | r | r_1_prt_r2_r_key_r_name_key | r_1_prt_r2_r_key_r_name_key | u |
| (3 rows) |
| |
| INSERT INTO r VALUES (1,'xxxx'),(1,'xxxx'); --should be prevented by constraint |
| ERROR: duplicate key value violates unique constraint "r_1_prt_r1_r_key_r_name_key" (seg1 127.0.0.1:25433 pid=78719) |
| DETAIL: Key (r_key, r_name)=(1, xxxx ) already exists. |
| INSERT INTO r VALUES (6,'xxxx'),(6,'xxxx'); --should be prevented by constraint |
| ERROR: duplicate key value violates unique constraint "r_1_prt_r2_r_key_r_name_key" (seg2 127.0.0.1:25434 pid=78720) |
| DETAIL: Key (r_key, r_name)=(6, xxxx ) already exists. |
| ALTER TABLE r ADD PARTITION added_part START(8) INCLUSIVE END (10) EXCLUSIVE; |
| SELECT * FROM dependencies_show_for_cons_idx(); |
| depname | classtype | refname | refclasstype | classid | objsubid | refclassid | refobjsubid | deptype |
| -------------------------------------+-----------+-------------------------------------+--------------+---------------+----------+---------------+-------------+--------- |
| r_r_key_r_name_key | I | r_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_added_part_r_key_r_name_key | i | r_1_prt_added_part | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1 | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_r_key_r_name_key | i | r_1_prt_r2 | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_added_part_r_key_r_name_key | i | r_1_prt_added_part_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_r_key_r_name_key | i | r_1_prt_r2_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_added_part_r_key_r_name_key | u | r_1_prt_added_part | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r1_r_key_r_name_key | u | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_r_key_r_name_key | u | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_added_part_r_key_r_name_key | u | r_1_prt_added_part | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_added_part_r_key_r_name_key | u | r_1_prt_added_part | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_r_key_r_name_key | u | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key | u | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_r_key_r_name_key | u | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r2_r_key_r_name_key | u | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_added_part_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r1_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| (19 rows) |
| |
| INSERT INTO r VALUES (9,'xxxx'),(9,'xxxx'); --should be prevented by constraint |
| ERROR: duplicate key value violates unique constraint "r_1_prt_added_part_r_key_r_name_key" (seg2 127.0.0.1:25434 pid=78720) |
| DETAIL: Key (r_key, r_name)=(9, xxxx ) already exists. |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| --------------------+-------------+-----------+-------------------------------------+-------------------------------------+----------------- |
| r | | r | r_r_key_r_name_key | r_r_key_r_name_key | u |
| r_1_prt_added_part | r | r | r_1_prt_added_part_r_key_r_name_key | r_1_prt_added_part_r_key_r_name_key | u |
| r_1_prt_r1 | r | r | r_1_prt_r1_r_key_r_name_key | r_1_prt_r1_r_key_r_name_key | u |
| r_1_prt_r2 | r | r | r_1_prt_r2_r_key_r_name_key | r_1_prt_r2_r_key_r_name_key | u |
| (4 rows) |
| |
| ALTER TABLE r_1_prt_r1 DROP CONSTRAINT r_1_prt_r1_r_key_r_name_key; --should fail |
| ERROR: cannot drop inherited constraint "r_1_prt_r1_r_key_r_name_key" of relation "r_1_prt_r1" |
| INSERT INTO r VALUES (1,'xxxx'),(1,'xxxx'); --should be prevented by constraint |
| ERROR: duplicate key value violates unique constraint "r_1_prt_r1_r_key_r_name_key" (seg1 127.0.0.1:25433 pid=78719) |
| DETAIL: Key (r_key, r_name)=(1, xxxx ) already exists. |
| INSERT INTO r VALUES (6,'xxxx'),(6,'xxxx'); --should be prevented by constraint |
| ERROR: duplicate key value violates unique constraint "r_1_prt_r2_r_key_r_name_key" (seg2 127.0.0.1:25434 pid=78720) |
| DETAIL: Key (r_key, r_name)=(6, xxxx ) already exists. |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| --------------------+-------------+-----------+-------------------------------------+-------------------------------------+----------------- |
| r | | r | r_r_key_r_name_key | r_r_key_r_name_key | u |
| r_1_prt_added_part | r | r | r_1_prt_added_part_r_key_r_name_key | r_1_prt_added_part_r_key_r_name_key | u |
| r_1_prt_r1 | r | r | r_1_prt_r1_r_key_r_name_key | r_1_prt_r1_r_key_r_name_key | u |
| r_1_prt_r2 | r | r | r_1_prt_r2_r_key_r_name_key | r_1_prt_r2_r_key_r_name_key | u |
| (4 rows) |
| |
| ALTER TABLE r ADD DEFAULT PARTITION d; |
| SELECT * FROM dependencies_show_for_cons_idx(); |
| depname | classtype | refname | refclasstype | classid | objsubid | refclassid | refobjsubid | deptype |
| -------------------------------------+-----------+-------------------------------------+--------------+---------------+----------+---------------+-------------+--------- |
| r_r_key_r_name_key | I | r_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_added_part_r_key_r_name_key | i | r_1_prt_added_part | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_d_r_key_r_name_key | i | r_1_prt_d | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1 | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_r_key_r_name_key | i | r_1_prt_r2 | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_added_part_r_key_r_name_key | i | r_1_prt_added_part_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_d_r_key_r_name_key | i | r_1_prt_d_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_r_key_r_name_key | i | r_1_prt_r2_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_added_part_r_key_r_name_key | u | r_1_prt_added_part | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_d_r_key_r_name_key | u | r_1_prt_d | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r1_r_key_r_name_key | u | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_r_key_r_name_key | u | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_added_part_r_key_r_name_key | u | r_1_prt_added_part | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_added_part_r_key_r_name_key | u | r_1_prt_added_part | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_d_r_key_r_name_key | u | r_1_prt_d | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_d_r_key_r_name_key | u | r_1_prt_d | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_r_key_r_name_key | u | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key | u | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_r_key_r_name_key | u | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r2_r_key_r_name_key | u | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_added_part_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_d_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r1_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| (25 rows) |
| |
| INSERT INTO r VALUES (22,'xxxx'),(22,'xxxx'); --should be prevented by constraint |
| ERROR: duplicate key value violates unique constraint "r_1_prt_d_r_key_r_name_key" (seg0 127.0.0.1:25432 pid=78718) |
| DETAIL: Key (r_key, r_name)=(22, xxxx ) already exists. |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| --------------------+-------------+-----------+-------------------------------------+-------------------------------------+----------------- |
| r | | r | r_r_key_r_name_key | r_r_key_r_name_key | u |
| r_1_prt_added_part | r | r | r_1_prt_added_part_r_key_r_name_key | r_1_prt_added_part_r_key_r_name_key | u |
| r_1_prt_d | r | r | r_1_prt_d_r_key_r_name_key | r_1_prt_d_r_key_r_name_key | u |
| r_1_prt_r1 | r | r | r_1_prt_r1_r_key_r_name_key | r_1_prt_r1_r_key_r_name_key | u |
| r_1_prt_r2 | r | r | r_1_prt_r2_r_key_r_name_key | r_1_prt_r2_r_key_r_name_key | u |
| (5 rows) |
| |
| ALTER TABLE r SPLIT PARTITION r2 AT (6) INTO (PARTITION r2_split_l, PARTITION r2_split_r); |
| SELECT * FROM dependencies_show_for_cons_idx(); |
| depname | classtype | refname | refclasstype | classid | objsubid | refclassid | refobjsubid | deptype |
| -------------------------------------+-----------+-------------------------------------+--------------+---------------+----------+---------------+-------------+--------- |
| r_r_key_r_name_key | I | r_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_added_part_r_key_r_name_key | i | r_1_prt_added_part | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_d_r_key_r_name_key | i | r_1_prt_d | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1 | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_split_l_r_key_r_name_key | i | r_1_prt_r2_split_l | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_split_r_r_key_r_name_key | i | r_1_prt_r2_split_r | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_added_part_r_key_r_name_key | i | r_1_prt_added_part_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_d_r_key_r_name_key | i | r_1_prt_d_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_split_l_r_key_r_name_key | i | r_1_prt_r2_split_l_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_split_r_r_key_r_name_key | i | r_1_prt_r2_split_r_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_added_part_r_key_r_name_key | u | r_1_prt_added_part | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_d_r_key_r_name_key | u | r_1_prt_d | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r1_r_key_r_name_key | u | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_split_l_r_key_r_name_key | u | r_1_prt_r2_split_l | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_split_r_r_key_r_name_key | u | r_1_prt_r2_split_r | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_added_part_r_key_r_name_key | u | r_1_prt_added_part | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_added_part_r_key_r_name_key | u | r_1_prt_added_part | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_d_r_key_r_name_key | u | r_1_prt_d | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_d_r_key_r_name_key | u | r_1_prt_d | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_r_key_r_name_key | u | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key | u | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_split_l_r_key_r_name_key | u | r_1_prt_r2_split_l | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r2_split_l_r_key_r_name_key | u | r_1_prt_r2_split_l | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_split_r_r_key_r_name_key | u | r_1_prt_r2_split_r | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r2_split_r_r_key_r_name_key | u | r_1_prt_r2_split_r | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_added_part_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_d_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r1_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_split_l_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_split_r_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| (31 rows) |
| |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| --------------------+-------------+-----------+-------------------------------------+-------------------------------------+----------------- |
| r | | r | r_r_key_r_name_key | r_r_key_r_name_key | u |
| r_1_prt_added_part | r | r | r_1_prt_added_part_r_key_r_name_key | r_1_prt_added_part_r_key_r_name_key | u |
| r_1_prt_d | r | r | r_1_prt_d_r_key_r_name_key | r_1_prt_d_r_key_r_name_key | u |
| r_1_prt_r1 | r | r | r_1_prt_r1_r_key_r_name_key | r_1_prt_r1_r_key_r_name_key | u |
| r_1_prt_r2_split_l | r | r | r_1_prt_r2_split_l_r_key_r_name_key | r_1_prt_r2_split_l_r_key_r_name_key | u |
| r_1_prt_r2_split_r | r | r | r_1_prt_r2_split_r_r_key_r_name_key | r_1_prt_r2_split_r_r_key_r_name_key | u |
| (6 rows) |
| |
| INSERT INTO r VALUES (5,'xxxx'),(5,'xxxx'); --should be prevented by constraint |
| ERROR: duplicate key value violates unique constraint "r_1_prt_r2_split_l_r_key_r_name_key" (seg2 127.0.0.1:25434 pid=78720) |
| DETAIL: Key (r_key, r_name)=(5, xxxx ) already exists. |
| INSERT INTO r VALUES (7,'xxxx'),(7,'xxxx'); --should be prevented by constraint |
| ERROR: duplicate key value violates unique constraint "r_1_prt_r2_split_r_r_key_r_name_key" (seg0 127.0.0.1:25432 pid=78718) |
| DETAIL: Key (r_key, r_name)=(7, xxxx ) already exists. |
| alter table r rename partition r1 to r1_renamed; |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| --------------------+-------------+-----------+-------------------------------------+-------------------------------------+----------------- |
| r | | r | r_r_key_r_name_key | r_r_key_r_name_key | u |
| r_1_prt_added_part | r | r | r_1_prt_added_part_r_key_r_name_key | r_1_prt_added_part_r_key_r_name_key | u |
| r_1_prt_d | r | r | r_1_prt_d_r_key_r_name_key | r_1_prt_d_r_key_r_name_key | u |
| r_1_prt_r1_renamed | r | r | r_1_prt_r1_r_key_r_name_key | r_1_prt_r1_r_key_r_name_key | u |
| r_1_prt_r2_split_l | r | r | r_1_prt_r2_split_l_r_key_r_name_key | r_1_prt_r2_split_l_r_key_r_name_key | u |
| r_1_prt_r2_split_r | r | r | r_1_prt_r2_split_r_r_key_r_name_key | r_1_prt_r2_split_r_r_key_r_name_key | u |
| (6 rows) |
| |
| INSERT INTO r VALUES (1,'xxxx'),(1,'xxxx'); --should be prevented by constraint |
| ERROR: duplicate key value violates unique constraint "r_1_prt_r1_r_key_r_name_key" (seg1 127.0.0.1:25433 pid=78719) |
| DETAIL: Key (r_key, r_name)=(1, xxxx ) already exists. |
| ALTER TABLE r DROP PARTITION r1_renamed; |
| SELECT * FROM dependencies_show_for_cons_idx(); |
| depname | classtype | refname | refclasstype | classid | objsubid | refclassid | refobjsubid | deptype |
| -------------------------------------+-----------+-------------------------------------+--------------+---------------+----------+---------------+-------------+--------- |
| r_r_key_r_name_key | I | r_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_added_part_r_key_r_name_key | i | r_1_prt_added_part | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_d_r_key_r_name_key | i | r_1_prt_d | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_split_l_r_key_r_name_key | i | r_1_prt_r2_split_l | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_split_r_r_key_r_name_key | i | r_1_prt_r2_split_r | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_added_part_r_key_r_name_key | i | r_1_prt_added_part_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_d_r_key_r_name_key | i | r_1_prt_d_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_split_l_r_key_r_name_key | i | r_1_prt_r2_split_l_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_split_r_r_key_r_name_key | i | r_1_prt_r2_split_r_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_added_part_r_key_r_name_key | u | r_1_prt_added_part | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_d_r_key_r_name_key | u | r_1_prt_d | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_split_l_r_key_r_name_key | u | r_1_prt_r2_split_l | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_split_r_r_key_r_name_key | u | r_1_prt_r2_split_r | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_added_part_r_key_r_name_key | u | r_1_prt_added_part | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_added_part_r_key_r_name_key | u | r_1_prt_added_part | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_d_r_key_r_name_key | u | r_1_prt_d | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_d_r_key_r_name_key | u | r_1_prt_d | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_split_l_r_key_r_name_key | u | r_1_prt_r2_split_l | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r2_split_l_r_key_r_name_key | u | r_1_prt_r2_split_l | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_split_r_r_key_r_name_key | u | r_1_prt_r2_split_r | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r2_split_r_r_key_r_name_key | u | r_1_prt_r2_split_r | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_added_part_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_d_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_split_l_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_split_r_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| (25 rows) |
| |
| INSERT INTO r VALUES (1,'xxxx'),(1,'xxxx'); --should be prevented by constraint |
| ERROR: duplicate key value violates unique constraint "r_1_prt_d_r_key_r_name_key" (seg1 127.0.0.1:25433 pid=78719) |
| DETAIL: Key (r_key, r_name)=(1, xxxx ) already exists. |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| --------------------+-------------+-----------+-------------------------------------+-------------------------------------+----------------- |
| r | | r | r_r_key_r_name_key | r_r_key_r_name_key | u |
| r_1_prt_added_part | r | r | r_1_prt_added_part_r_key_r_name_key | r_1_prt_added_part_r_key_r_name_key | u |
| r_1_prt_d | r | r | r_1_prt_d_r_key_r_name_key | r_1_prt_d_r_key_r_name_key | u |
| r_1_prt_r2_split_l | r | r | r_1_prt_r2_split_l_r_key_r_name_key | r_1_prt_r2_split_l_r_key_r_name_key | u |
| r_1_prt_r2_split_r | r | r | r_1_prt_r2_split_r_r_key_r_name_key | r_1_prt_r2_split_r_r_key_r_name_key | u |
| (5 rows) |
| |
| ALTER TABLE r DROP CONSTRAINT r_r_key_r_name_key; --should work |
| SELECT * FROM dependencies_show_for_cons_idx(); |
| depname | classtype | refname | refclasstype | classid | objsubid | refclassid | refobjsubid | deptype |
| ---------+-----------+---------+--------------+---------+----------+------------+-------------+--------- |
| (0 rows) |
| |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| --------------------+-------------+-----------+-----------------+------------+----------------- |
| r | | r | | | |
| r_1_prt_added_part | r | r | | | |
| r_1_prt_d | r | r | | | |
| r_1_prt_r2_split_l | r | r | | | |
| r_1_prt_r2_split_r | r | r | | | |
| (5 rows) |
| |
| INSERT INTO r VALUES (1,'xxxx'),(1,'xxxx'); --should be allowed: no unique constraint exists |
| INSERT INTO r VALUES (6,'xxxx'),(6,'xxxx'); --should be allowed: no unique constraint exists |
| INSERT INTO r VALUES (9,'xxxx'),(9,'xxxx'); --should be allowed: no unique constraint exists |
| INSERT INTO r VALUES (22,'xxxx'),(22,'xxxx'); --should be allowed: no unique constraint exists |
| -- EXCHANGE... prepare table e and swap with partition |
| SELECT recreate_two_level_table(); |
| recreate_two_level_table |
| -------------------------- |
| |
| (1 row) |
| |
| ALTER TABLE r ADD UNIQUE(r_key,r_name); |
| SELECT * FROM dependencies_show_for_cons_idx(); |
| depname | classtype | refname | refclasstype | classid | objsubid | refclassid | refobjsubid | deptype |
| -----------------------------+-----------+-----------------------------+--------------+---------------+----------+---------------+-------------+--------- |
| r_r_key_r_name_key | I | r_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1 | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_r_key_r_name_key | i | r_1_prt_r2 | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_r_key_r_name_key | i | r_1_prt_r2_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key | u | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_r_key_r_name_key | u | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r1_r_key_r_name_key | u | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key | u | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_r_key_r_name_key | u | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r2_r_key_r_name_key | u | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| (13 rows) |
| |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| ----------------+-------------+-----------+-----------------------------+-----------------------------+----------------- |
| r | | r | r_r_key_r_name_key | r_r_key_r_name_key | u |
| r_1_prt_r1 | r | r | r_1_prt_r1_r_key_r_name_key | r_1_prt_r1_r_key_r_name_key | u |
| r_1_prt_r2 | r | r | r_1_prt_r2_r_key_r_name_key | r_1_prt_r2_r_key_r_name_key | u |
| (3 rows) |
| |
| CREATE TABLE e (LIKE r INCLUDING CONSTRAINTS INCLUDING INDEXES); |
| NOTICE: table doesn't have 'DISTRIBUTED BY' clause, defaulting to distribution columns from LIKE table |
| SELECT * FROM dependencies_show_for_cons_idx(); |
| depname | classtype | refname | refclasstype | classid | objsubid | refclassid | refobjsubid | deptype |
| -----------------------------+-----------+-----------------------------+--------------+---------------+----------+---------------+-------------+--------- |
| r_r_key_r_name_key | I | r_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1 | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_r_key_r_name_key | i | r_1_prt_r2 | r | pg_class | 0 | pg_class | 0 | S |
| e_r_key_r_name_key | i | e_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_r_key_r_name_key | i | r_1_prt_r2_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key | u | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_r_key_r_name_key | u | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 0 | S |
| e_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 1 | a |
| e_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_r_key_r_name_key | u | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key | u | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_r_key_r_name_key | u | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r2_r_key_r_name_key | u | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| (16 rows) |
| |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| ----------------+-------------+-----------+-----------------------------+-----------------------------+----------------- |
| r | | r | r_r_key_r_name_key | r_r_key_r_name_key | u |
| r_1_prt_r1 | r | r | r_1_prt_r1_r_key_r_name_key | r_1_prt_r1_r_key_r_name_key | u |
| r_1_prt_r2 | r | r | r_1_prt_r2_r_key_r_name_key | r_1_prt_r2_r_key_r_name_key | u |
| (3 rows) |
| |
| ALTER TABLE r EXCHANGE PARTITION r1 WITH TABLE e; |
| SELECT * FROM dependencies_show_for_cons_idx(); |
| depname | classtype | refname | refclasstype | classid | objsubid | refclassid | refobjsubid | deptype |
| -----------------------------+-----------+-----------------------------+--------------+---------------+----------+---------------+-------------+--------- |
| r_r_key_r_name_key | I | r_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| e_r_key_r_name_key | i | r_1_prt_r1 | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_r_key_r_name_key | i | r_1_prt_r2 | r | pg_class | 0 | pg_class | 0 | S |
| e_r_key_r_name_key | i | e_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_r_key_r_name_key | i | r_1_prt_r2_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| e_r_key_r_name_key | u | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_r_key_r_name_key | u | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 0 | S |
| e_r_key_r_name_key | u | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 1 | a |
| e_r_key_r_name_key | u | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_r_key_r_name_key | u | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r2_r_key_r_name_key | u | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 2 | a |
| e_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| (16 rows) |
| |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| ----------------+-------------+-----------+-----------------------------+-----------------------------+----------------- |
| r | | r | r_r_key_r_name_key | r_r_key_r_name_key | u |
| r_1_prt_r1 | r | r | e_r_key_r_name_key | e_r_key_r_name_key | u |
| r_1_prt_r2 | r | r | r_1_prt_r2_r_key_r_name_key | r_1_prt_r2_r_key_r_name_key | u |
| (3 rows) |
| |
| --MAKE SURE PARTITION CONSTRAINT EXISTS... |
| -- UNIQUE create constraint inside CREATE TABLE DDL...this is different |
| DROP TABLE IF EXISTS r; |
| CREATE TABLE r (r_key INTEGER NOT NULL,UNIQUE(r_key)) DISTRIBUTED BY (r_key) |
| PARTITION BY range (r_key) (PARTITION r1 START (0), PARTITION r2 START (5) END (8)); |
| SELECT * FROM dependencies_show_for_cons_idx(); |
| depname | classtype | refname | refclasstype | classid | objsubid | refclassid | refobjsubid | deptype |
| -----------------------------+-----------+-----------------------------+--------------+---------------+----------+---------------+-------------+--------- |
| r_r_key_key | I | r_r_key_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_key | i | r_1_prt_r1 | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_r_key_key | i | r_1_prt_r2 | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r1_r_key_key | i | r_1_prt_r1_r_key_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_r_key_key | i | r_1_prt_r2_r_key_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_key | u | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_r_key_key | u | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r1_r_key_key | u | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_r_key_key | u | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_key | u | r_r_key_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_r_key_key | u | r_r_key_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| (14 rows) |
| |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| ----------------+-------------+-----------+----------------------+----------------------+----------------- |
| r | | r | r_r_key_key | r_r_key_key | u |
| r_1_prt_r1 | r | r | r_1_prt_r1_r_key_key | r_1_prt_r1_r_key_key | u |
| r_1_prt_r2 | r | r | r_1_prt_r2_r_key_key | r_1_prt_r2_r_key_key | u |
| (3 rows) |
| |
| INSERT INTO r VALUES (1),(1); |
| ERROR: duplicate key value violates unique constraint "r_1_prt_r1_r_key_key" (seg1 127.0.0.1:25433 pid=78719) |
| DETAIL: Key (r_key)=(1) already exists. |
| INSERT INTO r VALUES (6),(6); |
| ERROR: duplicate key value violates unique constraint "r_1_prt_r2_r_key_key" (seg2 127.0.0.1:25434 pid=78720) |
| DETAIL: Key (r_key)=(6) already exists. |
| SELECT * FROM dependencies_show_for_cons_idx(); |
| depname | classtype | refname | refclasstype | classid | objsubid | refclassid | refobjsubid | deptype |
| -----------------------------+-----------+-----------------------------+--------------+---------------+----------+---------------+-------------+--------- |
| r_r_key_key | I | r_r_key_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_key | i | r_1_prt_r1 | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_r_key_key | i | r_1_prt_r2 | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r1_r_key_key | i | r_1_prt_r1_r_key_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_r_key_key | i | r_1_prt_r2_r_key_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_key | u | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_r_key_key | u | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r1_r_key_key | u | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_r_key_key | u | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_key | u | r_r_key_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_r_key_key | u | r_r_key_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| (14 rows) |
| |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| ----------------+-------------+-----------+----------------------+----------------------+----------------- |
| r | | r | r_r_key_key | r_r_key_key | u |
| r_1_prt_r1 | r | r | r_1_prt_r1_r_key_key | r_1_prt_r1_r_key_key | u |
| r_1_prt_r2 | r | r | r_1_prt_r2_r_key_key | r_1_prt_r2_r_key_key | u |
| (3 rows) |
| |
| INSERT INTO r VALUES (1),(1); |
| ERROR: duplicate key value violates unique constraint "r_1_prt_r1_r_key_key" (seg1 127.0.0.1:25433 pid=78719) |
| DETAIL: Key (r_key)=(1) already exists. |
| INSERT INTO r VALUES (6),(6); |
| ERROR: duplicate key value violates unique constraint "r_1_prt_r2_r_key_key" (seg2 127.0.0.1:25434 pid=78720) |
| DETAIL: Key (r_key)=(6) already exists. |
| --PRIMARY KEY constraint: validate we correctly add it and can only drop from root |
| SELECT recreate_two_level_table(); |
| recreate_two_level_table |
| -------------------------- |
| |
| (1 row) |
| |
| ALTER TABLE r ADD PRIMARY KEY(r_key,r_name); |
| SELECT * FROM dependencies_show_for_cons_idx(); |
| depname | classtype | refname | refclasstype | classid | objsubid | refclassid | refobjsubid | deptype |
| -----------------------------+-----------+-----------------------------+--------------+---------------+----------+---------------+-------------+--------- |
| r_pkey | I | r_pkey | p | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_pkey | i | r_1_prt_r1_pkey | p | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_pkey | i | r_1_prt_r2_pkey | p | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_pkey | i | r_1_prt_r1 | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_pkey | i | r_1_prt_r2 | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_pkey | p | r_pkey | p | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_pkey | p | r_pkey | p | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r1_pkey | p | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_pkey | p | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r1_pkey | p | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_pkey | p | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_pkey | p | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r2_pkey | p | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 2 | a |
| (16 rows) |
| |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| ----------------+-------------+-----------+-----------------+-----------------+----------------- |
| r | | r | r_pkey | r_pkey | p |
| r_1_prt_r1 | r | r | r_1_prt_r1_pkey | r_1_prt_r1_pkey | p |
| r_1_prt_r2 | r | r | r_1_prt_r2_pkey | r_1_prt_r2_pkey | p |
| (3 rows) |
| |
| ALTER TABLE r_1_prt_r1 DROP CONSTRAINT r_1_prt_r1_pkey; --should fail |
| ERROR: cannot drop inherited constraint "r_1_prt_r1_pkey" of relation "r_1_prt_r1" |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| ----------------+-------------+-----------+-----------------+-----------------+----------------- |
| r | | r | r_pkey | r_pkey | p |
| r_1_prt_r1 | r | r | r_1_prt_r1_pkey | r_1_prt_r1_pkey | p |
| r_1_prt_r2 | r | r | r_1_prt_r2_pkey | r_1_prt_r2_pkey | p |
| (3 rows) |
| |
| ALTER TABLE r DROP CONSTRAINT r_pkey; --should work |
| SELECT * FROM dependencies_show_for_cons_idx(); |
| depname | classtype | refname | refclasstype | classid | objsubid | refclassid | refobjsubid | deptype |
| -----------------------------+-----------+-----------------------------+--------------+---------------+----------+---------------+-------------+--------- |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 2 | a |
| (3 rows) |
| |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| ----------------+-------------+-----------+-----------------+------------+----------------- |
| r | | r | | | |
| r_1_prt_r1 | r | r | | | |
| r_1_prt_r2 | r | r | | | |
| (3 rows) |
| |
| --EXCLUSION constraint: validate we cannot create an exclusion constraint on a |
| --partition table. These are disallowed in GPDB. |
| SELECT recreate_two_level_table(); |
| recreate_two_level_table |
| -------------------------- |
| |
| (1 row) |
| |
| ALTER TABLE r ADD EXCLUDE (r_key WITH =,r_name WITH =); |
| ERROR: exclusion constraints are not supported on partitioned tables |
| LINE 1: ALTER TABLE r ADD EXCLUDE (r_key WITH =,r_name WITH =); |
| ^ |
| SELECT * FROM dependencies_show_for_cons_idx(); |
| depname | classtype | refname | refclasstype | classid | objsubid | refclassid | refobjsubid | deptype |
| -----------------------------+-----------+-----------------------------+--------------+---------------+----------+---------------+-------------+--------- |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 2 | a |
| (3 rows) |
| |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| ----------------+-------------+-----------+-----------------+------------+----------------- |
| r | | r | | | |
| r_1_prt_r1 | r | r | | | |
| r_1_prt_r2 | r | r | | | |
| (3 rows) |
| |
| ALTER TABLE r_1_prt_r1 DROP CONSTRAINT r_1_prt_r1_r_key_r_name_excl; --should fail |
| ERROR: constraint "r_1_prt_r1_r_key_r_name_excl" of relation "r_1_prt_r1" does not exist |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| ----------------+-------------+-----------+-----------------+------------+----------------- |
| r | | r | | | |
| r_1_prt_r1 | r | r | | | |
| r_1_prt_r2 | r | r | | | |
| (3 rows) |
| |
| --new partition table (4) should be created with constraints. |
| DROP TABLE IF EXISTS r; |
| CREATE TABLE r ( |
| r_key INTEGER NOT NULL, |
| r_name CHAR(25) |
| ) |
| DISTRIBUTED BY (r_key) |
| PARTITION BY list (r_key) |
| ( |
| PARTITION r1 VALUES (0), |
| PARTITION r2 VALUES (1) |
| ); |
| ALTER TABLE r ADD UNIQUE(r_key,r_name); |
| SELECT * FROM dependencies_show_for_cons_idx(); |
| depname | classtype | refname | refclasstype | classid | objsubid | refclassid | refobjsubid | deptype |
| ------------------------------+-----------+------------------------------+--------------+---------------+----------+---------------+-------------+--------- |
| r_r_key_r_name_key | I | r_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key1 | i | r_1_prt_r1 | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_r_key_r_name_key | i | r_1_prt_r2 | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key1 | i | r_1_prt_r1_r_key_r_name_key1 | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_r_key_r_name_key | i | r_1_prt_r2_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key1 | u | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_r_key_r_name_key | u | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_r_key_r_name_key1 | u | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key1 | u | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_r_key_r_name_key | u | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r2_r_key_r_name_key | u | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_r_key_r_name_key1 | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| (16 rows) |
| |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| ----------------+-------------+-----------+------------------------------+------------------------------+----------------- |
| r | | r | r_r_key_r_name_key | r_r_key_r_name_key | u |
| r_1_prt_r1 | r | r | r_1_prt_r1_r_key_r_name_key1 | r_1_prt_r1_r_key_r_name_key1 | u |
| r_1_prt_r2 | r | r | r_1_prt_r2_r_key_r_name_key | r_1_prt_r2_r_key_r_name_key | u |
| (3 rows) |
| |
| ALTER TABLE r ADD PARTITION r3 VALUES(2); |
| SELECT * FROM dependencies_show_for_cons_idx(); |
| depname | classtype | refname | refclasstype | classid | objsubid | refclassid | refobjsubid | deptype |
| ------------------------------+-----------+------------------------------+--------------+---------------+----------+---------------+-------------+--------- |
| r_r_key_r_name_key | I | r_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key1 | i | r_1_prt_r1 | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_r_key_r_name_key | i | r_1_prt_r2 | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r3_r_key_r_name_key | i | r_1_prt_r3 | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key1 | i | r_1_prt_r1_r_key_r_name_key1 | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_r_key_r_name_key | i | r_1_prt_r2_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r3_r_key_r_name_key | i | r_1_prt_r3_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key1 | u | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_r_key_r_name_key | u | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r3_r_key_r_name_key | u | r_1_prt_r3 | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_r_key_r_name_key1 | u | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key1 | u | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_r_key_r_name_key | u | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r2_r_key_r_name_key | u | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r3_r_key_r_name_key | u | r_1_prt_r3 | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r3_r_key_r_name_key | u | r_1_prt_r3 | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_r_key_r_name_key1 | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r3_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| (22 rows) |
| |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| ----------------+-------------+-----------+------------------------------+------------------------------+----------------- |
| r | | r | r_r_key_r_name_key | r_r_key_r_name_key | u |
| r_1_prt_r1 | r | r | r_1_prt_r1_r_key_r_name_key1 | r_1_prt_r1_r_key_r_name_key1 | u |
| r_1_prt_r2 | r | r | r_1_prt_r2_r_key_r_name_key | r_1_prt_r2_r_key_r_name_key | u |
| r_1_prt_r3 | r | r | r_1_prt_r3_r_key_r_name_key | r_1_prt_r3_r_key_r_name_key | u |
| (4 rows) |
| |
| -- PRIMARY create constraint inside CREATE TABLE DDL...this is different |
| DROP TABLE IF EXISTS r; |
| CREATE TABLE r (r_key INTEGER NOT NULL,PRIMARY KEY (r_key)) DISTRIBUTED BY (r_key) |
| PARTITION BY range (r_key) (PARTITION r1 START (0), PARTITION r2 START (5) END (8)); |
| SELECT * FROM dependencies_show_for_cons_idx(); |
| depname | classtype | refname | refclasstype | classid | objsubid | refclassid | refobjsubid | deptype |
| -----------------------------+-----------+-----------------------------+--------------+---------------+----------+---------------+-------------+--------- |
| r_pkey | I | r_pkey | p | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_pkey | i | r_1_prt_r1_pkey | p | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_pkey | i | r_1_prt_r2_pkey | p | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_pkey | i | r_1_prt_r1 | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_pkey | i | r_1_prt_r2 | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_pkey | p | r_pkey | p | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_pkey | p | r_pkey | p | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r1_pkey | p | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_pkey | p | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r1_pkey | p | r_1_prt_r1 | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r2_pkey | p | r_1_prt_r2 | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 2 | a |
| (14 rows) |
| |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| ----------------+-------------+-----------+-----------------+-----------------+----------------- |
| r | | r | r_pkey | r_pkey | p |
| r_1_prt_r1 | r | r | r_1_prt_r1_pkey | r_1_prt_r1_pkey | p |
| r_1_prt_r2 | r | r | r_1_prt_r2_pkey | r_1_prt_r2_pkey | p |
| (3 rows) |
| |
| ALTER TABLE r DROP CONSTRAINT r_pkey; --should work |
| SELECT * FROM dependencies_show_for_cons_idx(); |
| depname | classtype | refname | refclasstype | classid | objsubid | refclassid | refobjsubid | deptype |
| -----------------------------+-----------+-----------------------------+--------------+---------------+----------+---------------+-------------+--------- |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 2 | a |
| (3 rows) |
| |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| ----------------+-------------+-----------+-----------------+------------+----------------- |
| r | | r | | | |
| r_1_prt_r1 | r | r | | | |
| r_1_prt_r2 | r | r | | | |
| (3 rows) |
| |
| DROP TABLE r; |
| -- --########### THREE LEVEL ############################### |
| DROP FUNCTION IF EXISTS recreate_three_level_table(); |
| NOTICE: function recreate_three_level_table() does not exist, skipping |
| CREATE FUNCTION recreate_three_level_table() RETURNS VOID |
| LANGUAGE SQL VOLATILE STRICT AS $fn$ |
| DROP TABLE IF EXISTS r; |
| CREATE TABLE r ( |
| r_key INTEGER NOT NULL, |
| r_name CHAR(25) |
| ) |
| DISTRIBUTED BY (r_key) |
| PARTITION BY range (r_key) |
| SUBPARTITION BY list (r_name) SUBPARTITION TEMPLATE |
| ( |
| SUBPARTITION a VALUES ('A'), |
| SUBPARTITION b VALUES ('B') |
| ) |
| ( |
| PARTITION r1 START (0), |
| PARTITION r2 START (5) END (8) |
| ); |
| $fn$; |
| -- validate that there are no constraints when we start |
| SELECT * FROM partition_tables_show_all('r'); |
| ERROR: relation "r" does not exist |
| CONTEXT: SQL function "partition_tables" statement 1 |
| SQL function "partition_tables_show_all" statement 1 |
| -- UNIQUE constraint: validate we correctly add it and can only drop from root |
| SELECT recreate_three_level_table(); |
| NOTICE: table "r" does not exist, skipping |
| recreate_three_level_table |
| ---------------------------- |
| |
| (1 row) |
| |
| ALTER TABLE r ADD UNIQUE(r_key,r_name); |
| SELECT * FROM dependencies_show_for_cons_idx(); |
| depname | classtype | refname | refclasstype | classid | objsubid | refclassid | refobjsubid | deptype |
| -------------------------------------+-----------+-------------------------------------+--------------+---------------+----------+---------------+-------------+--------- |
| r_1_prt_r1_r_key_r_name_key1 | I | r_1_prt_r1_r_key_r_name_key1 | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_r_key_r_name_key | I | r_1_prt_r2_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_r_key_r_name_key | I | r_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | i | r_1_prt_r1_2_prt_a | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | i | r_1_prt_r1_2_prt_b | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | i | r_1_prt_r2_2_prt_a | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | i | r_1_prt_r2_2_prt_b | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | i | r_1_prt_r1_2_prt_a_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | i | r_1_prt_r1_2_prt_b_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | i | r_1_prt_r2_2_prt_a_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | i | r_1_prt_r2_2_prt_b_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | u | r_1_prt_r1_2_prt_a | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | u | r_1_prt_r1_2_prt_b | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | u | r_1_prt_r2_2_prt_a | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | u | r_1_prt_r2_2_prt_b | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | u | r_1_prt_r1_2_prt_a | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | u | r_1_prt_r1_2_prt_a | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | u | r_1_prt_r1_2_prt_b | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | u | r_1_prt_r1_2_prt_b | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | u | r_1_prt_r2_2_prt_a | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | u | r_1_prt_r2_2_prt_a | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | u | r_1_prt_r2_2_prt_b | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | u | r_1_prt_r2_2_prt_b | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | u | r_1_prt_r1_r_key_r_name_key1 | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | u | r_1_prt_r1_r_key_r_name_key1 | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r1_r_key_r_name_key1 | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | u | r_1_prt_r2_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | u | r_1_prt_r2_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| (32 rows) |
| |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| --------------------+-------------+-----------+-------------------------------------+-------------------------------------+----------------- |
| r | | r | r_r_key_r_name_key | r_r_key_r_name_key | u |
| r_1_prt_r1 | r | r | r_1_prt_r1_r_key_r_name_key1 | r_1_prt_r1_r_key_r_name_key1 | u |
| r_1_prt_r1_2_prt_a | r_1_prt_r1 | r | r_1_prt_r1_2_prt_a_r_key_r_name_key | r_1_prt_r1_2_prt_a_r_key_r_name_key | u |
| r_1_prt_r1_2_prt_b | r_1_prt_r1 | r | r_1_prt_r1_2_prt_b_r_key_r_name_key | r_1_prt_r1_2_prt_b_r_key_r_name_key | u |
| r_1_prt_r2 | r | r | r_1_prt_r2_r_key_r_name_key | r_1_prt_r2_r_key_r_name_key | u |
| r_1_prt_r2_2_prt_a | r_1_prt_r2 | r | r_1_prt_r2_2_prt_a_r_key_r_name_key | r_1_prt_r2_2_prt_a_r_key_r_name_key | u |
| r_1_prt_r2_2_prt_b | r_1_prt_r2 | r | r_1_prt_r2_2_prt_b_r_key_r_name_key | r_1_prt_r2_2_prt_b_r_key_r_name_key | u |
| (7 rows) |
| |
| ALTER TABLE r_1_prt_r1 DROP CONSTRAINT r_1_prt_r1_r_key_r_name_key1; --should fail |
| ERROR: cannot drop inherited constraint "r_1_prt_r1_r_key_r_name_key1" of relation "r_1_prt_r1" |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| --------------------+-------------+-----------+-------------------------------------+-------------------------------------+----------------- |
| r | | r | r_r_key_r_name_key | r_r_key_r_name_key | u |
| r_1_prt_r1 | r | r | r_1_prt_r1_r_key_r_name_key1 | r_1_prt_r1_r_key_r_name_key1 | u |
| r_1_prt_r1_2_prt_a | r_1_prt_r1 | r | r_1_prt_r1_2_prt_a_r_key_r_name_key | r_1_prt_r1_2_prt_a_r_key_r_name_key | u |
| r_1_prt_r1_2_prt_b | r_1_prt_r1 | r | r_1_prt_r1_2_prt_b_r_key_r_name_key | r_1_prt_r1_2_prt_b_r_key_r_name_key | u |
| r_1_prt_r2 | r | r | r_1_prt_r2_r_key_r_name_key | r_1_prt_r2_r_key_r_name_key | u |
| r_1_prt_r2_2_prt_a | r_1_prt_r2 | r | r_1_prt_r2_2_prt_a_r_key_r_name_key | r_1_prt_r2_2_prt_a_r_key_r_name_key | u |
| r_1_prt_r2_2_prt_b | r_1_prt_r2 | r | r_1_prt_r2_2_prt_b_r_key_r_name_key | r_1_prt_r2_2_prt_b_r_key_r_name_key | u |
| (7 rows) |
| |
| ALTER TABLE r_1_prt_r1_2_prt_a DROP CONSTRAINT r_1_prt_r1_2_prt_a_r_key_r_name_key; --should fail |
| ERROR: cannot drop inherited constraint "r_1_prt_r1_2_prt_a_r_key_r_name_key" of relation "r_1_prt_r1_2_prt_a" |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| --------------------+-------------+-----------+-------------------------------------+-------------------------------------+----------------- |
| r | | r | r_r_key_r_name_key | r_r_key_r_name_key | u |
| r_1_prt_r1 | r | r | r_1_prt_r1_r_key_r_name_key1 | r_1_prt_r1_r_key_r_name_key1 | u |
| r_1_prt_r1_2_prt_a | r_1_prt_r1 | r | r_1_prt_r1_2_prt_a_r_key_r_name_key | r_1_prt_r1_2_prt_a_r_key_r_name_key | u |
| r_1_prt_r1_2_prt_b | r_1_prt_r1 | r | r_1_prt_r1_2_prt_b_r_key_r_name_key | r_1_prt_r1_2_prt_b_r_key_r_name_key | u |
| r_1_prt_r2 | r | r | r_1_prt_r2_r_key_r_name_key | r_1_prt_r2_r_key_r_name_key | u |
| r_1_prt_r2_2_prt_a | r_1_prt_r2 | r | r_1_prt_r2_2_prt_a_r_key_r_name_key | r_1_prt_r2_2_prt_a_r_key_r_name_key | u |
| r_1_prt_r2_2_prt_b | r_1_prt_r2 | r | r_1_prt_r2_2_prt_b_r_key_r_name_key | r_1_prt_r2_2_prt_b_r_key_r_name_key | u |
| (7 rows) |
| |
| ALTER TABLE r DROP CONSTRAINT r_r_key_r_name_key; --should work |
| SELECT * FROM dependencies_show_for_cons_idx(); |
| depname | classtype | refname | refclasstype | classid | objsubid | refclassid | refobjsubid | deptype |
| -----------------------------+-----------+-----------------------------+--------------+---------------+----------+---------------+-------------+--------- |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 2 | a |
| (3 rows) |
| |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| --------------------+-------------+-----------+-----------------+------------+----------------- |
| r | | r | | | |
| r_1_prt_r1 | r | r | | | |
| r_1_prt_r1_2_prt_a | r_1_prt_r1 | r | | | |
| r_1_prt_r1_2_prt_b | r_1_prt_r1 | r | | | |
| r_1_prt_r2 | r | r | | | |
| r_1_prt_r2_2_prt_a | r_1_prt_r2 | r | | | |
| r_1_prt_r2_2_prt_b | r_1_prt_r2 | r | | | |
| (7 rows) |
| |
| --PRIMARY KEY constraint: validate we correctly add it and can only drop from root |
| SELECT recreate_three_level_table(); |
| recreate_three_level_table |
| ---------------------------- |
| |
| (1 row) |
| |
| ALTER TABLE r ADD PRIMARY KEY(r_key,r_name); |
| SELECT * FROM dependencies_show_for_cons_idx(); |
| depname | classtype | refname | refclasstype | classid | objsubid | refclassid | refobjsubid | deptype |
| -----------------------------+-----------+-----------------------------+--------------+---------------+----------+---------------+-------------+--------- |
| r_1_prt_r1_pkey | I | r_1_prt_r1_pkey | p | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_pkey | I | r_1_prt_r2_pkey | p | pg_class | 0 | pg_constraint | 0 | i |
| r_pkey | I | r_pkey | p | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_a_pkey | i | r_1_prt_r1_2_prt_a_pkey | p | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_b_pkey | i | r_1_prt_r1_2_prt_b_pkey | p | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_2_prt_a_pkey | i | r_1_prt_r2_2_prt_a_pkey | p | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_2_prt_b_pkey | i | r_1_prt_r2_2_prt_b_pkey | p | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_a_pkey | i | r_1_prt_r1_2_prt_a | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_b_pkey | i | r_1_prt_r1_2_prt_b | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_a_pkey | i | r_1_prt_r2_2_prt_a | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_b_pkey | i | r_1_prt_r2_2_prt_b | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_a_pkey | p | r_1_prt_r1_pkey | p | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r1_2_prt_b_pkey | p | r_1_prt_r1_pkey | p | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r1_pkey | p | r_pkey | p | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_2_prt_a_pkey | p | r_1_prt_r2_pkey | p | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_2_prt_b_pkey | p | r_1_prt_r2_pkey | p | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_pkey | p | r_pkey | p | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r1_2_prt_a_pkey | p | r_1_prt_r1_2_prt_a | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_b_pkey | p | r_1_prt_r1_2_prt_b | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_a_pkey | p | r_1_prt_r2_2_prt_a | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_b_pkey | p | r_1_prt_r2_2_prt_b | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_a_pkey | p | r_1_prt_r1_2_prt_a | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_2_prt_a_pkey | p | r_1_prt_r1_2_prt_a | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_2_prt_b_pkey | p | r_1_prt_r1_2_prt_b | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_2_prt_b_pkey | p | r_1_prt_r1_2_prt_b | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_2_prt_a_pkey | p | r_1_prt_r2_2_prt_a | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r2_2_prt_a_pkey | p | r_1_prt_r2_2_prt_a | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_2_prt_b_pkey | p | r_1_prt_r2_2_prt_b | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r2_2_prt_b_pkey | p | r_1_prt_r2_2_prt_b | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 2 | a |
| (32 rows) |
| |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| --------------------+-------------+-----------+-------------------------+-------------------------+----------------- |
| r | | r | r_pkey | r_pkey | p |
| r_1_prt_r1 | r | r | r_1_prt_r1_pkey | r_1_prt_r1_pkey | p |
| r_1_prt_r1_2_prt_a | r_1_prt_r1 | r | r_1_prt_r1_2_prt_a_pkey | r_1_prt_r1_2_prt_a_pkey | p |
| r_1_prt_r1_2_prt_b | r_1_prt_r1 | r | r_1_prt_r1_2_prt_b_pkey | r_1_prt_r1_2_prt_b_pkey | p |
| r_1_prt_r2 | r | r | r_1_prt_r2_pkey | r_1_prt_r2_pkey | p |
| r_1_prt_r2_2_prt_a | r_1_prt_r2 | r | r_1_prt_r2_2_prt_a_pkey | r_1_prt_r2_2_prt_a_pkey | p |
| r_1_prt_r2_2_prt_b | r_1_prt_r2 | r | r_1_prt_r2_2_prt_b_pkey | r_1_prt_r2_2_prt_b_pkey | p |
| (7 rows) |
| |
| ALTER TABLE r_1_prt_r1 DROP CONSTRAINT r_1_prt_r1_pkey; --should fail |
| ERROR: cannot drop inherited constraint "r_1_prt_r1_pkey" of relation "r_1_prt_r1" |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| --------------------+-------------+-----------+-------------------------+-------------------------+----------------- |
| r | | r | r_pkey | r_pkey | p |
| r_1_prt_r1 | r | r | r_1_prt_r1_pkey | r_1_prt_r1_pkey | p |
| r_1_prt_r1_2_prt_a | r_1_prt_r1 | r | r_1_prt_r1_2_prt_a_pkey | r_1_prt_r1_2_prt_a_pkey | p |
| r_1_prt_r1_2_prt_b | r_1_prt_r1 | r | r_1_prt_r1_2_prt_b_pkey | r_1_prt_r1_2_prt_b_pkey | p |
| r_1_prt_r2 | r | r | r_1_prt_r2_pkey | r_1_prt_r2_pkey | p |
| r_1_prt_r2_2_prt_a | r_1_prt_r2 | r | r_1_prt_r2_2_prt_a_pkey | r_1_prt_r2_2_prt_a_pkey | p |
| r_1_prt_r2_2_prt_b | r_1_prt_r2 | r | r_1_prt_r2_2_prt_b_pkey | r_1_prt_r2_2_prt_b_pkey | p |
| (7 rows) |
| |
| ALTER TABLE r_1_prt_r1_2_prt_a DROP CONSTRAINT r_1_prt_r1_2_prt_a_pkey; --should fail |
| ERROR: cannot drop inherited constraint "r_1_prt_r1_2_prt_a_pkey" of relation "r_1_prt_r1_2_prt_a" |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| --------------------+-------------+-----------+-------------------------+-------------------------+----------------- |
| r | | r | r_pkey | r_pkey | p |
| r_1_prt_r1 | r | r | r_1_prt_r1_pkey | r_1_prt_r1_pkey | p |
| r_1_prt_r1_2_prt_a | r_1_prt_r1 | r | r_1_prt_r1_2_prt_a_pkey | r_1_prt_r1_2_prt_a_pkey | p |
| r_1_prt_r1_2_prt_b | r_1_prt_r1 | r | r_1_prt_r1_2_prt_b_pkey | r_1_prt_r1_2_prt_b_pkey | p |
| r_1_prt_r2 | r | r | r_1_prt_r2_pkey | r_1_prt_r2_pkey | p |
| r_1_prt_r2_2_prt_a | r_1_prt_r2 | r | r_1_prt_r2_2_prt_a_pkey | r_1_prt_r2_2_prt_a_pkey | p |
| r_1_prt_r2_2_prt_b | r_1_prt_r2 | r | r_1_prt_r2_2_prt_b_pkey | r_1_prt_r2_2_prt_b_pkey | p |
| (7 rows) |
| |
| ALTER TABLE r DROP CONSTRAINT r_pkey; --should work |
| SELECT * FROM dependencies_show_for_cons_idx(); |
| depname | classtype | refname | refclasstype | classid | objsubid | refclassid | refobjsubid | deptype |
| -----------------------------+-----------+-----------------------------+--------------+---------------+----------+---------------+-------------+--------- |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 2 | a |
| (3 rows) |
| |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| --------------------+-------------+-----------+-----------------+------------+----------------- |
| r | | r | | | |
| r_1_prt_r1 | r | r | | | |
| r_1_prt_r1_2_prt_a | r_1_prt_r1 | r | | | |
| r_1_prt_r1_2_prt_b | r_1_prt_r1 | r | | | |
| r_1_prt_r2 | r | r | | | |
| r_1_prt_r2_2_prt_a | r_1_prt_r2 | r | | | |
| r_1_prt_r2_2_prt_b | r_1_prt_r2 | r | | | |
| (7 rows) |
| |
| --New partition table 'C' should be created with constraints. |
| SELECT recreate_three_level_table(); |
| recreate_three_level_table |
| ---------------------------- |
| |
| (1 row) |
| |
| ALTER TABLE r ADD UNIQUE(r_key,r_name); |
| SELECT * FROM dependencies_show_for_cons_idx(); |
| depname | classtype | refname | refclasstype | classid | objsubid | refclassid | refobjsubid | deptype |
| -------------------------------------+-----------+-------------------------------------+--------------+---------------+----------+---------------+-------------+--------- |
| r_1_prt_r1_r_key_r_name_key1 | I | r_1_prt_r1_r_key_r_name_key1 | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_r_key_r_name_key | I | r_1_prt_r2_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_r_key_r_name_key | I | r_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | i | r_1_prt_r1_2_prt_a | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | i | r_1_prt_r1_2_prt_b | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | i | r_1_prt_r2_2_prt_a | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | i | r_1_prt_r2_2_prt_b | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | i | r_1_prt_r1_2_prt_a_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | i | r_1_prt_r1_2_prt_b_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | i | r_1_prt_r2_2_prt_a_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | i | r_1_prt_r2_2_prt_b_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | u | r_1_prt_r1_2_prt_a | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | u | r_1_prt_r1_2_prt_b | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | u | r_1_prt_r2_2_prt_a | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | u | r_1_prt_r2_2_prt_b | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | u | r_1_prt_r1_2_prt_a | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | u | r_1_prt_r1_2_prt_a | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | u | r_1_prt_r1_2_prt_b | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | u | r_1_prt_r1_2_prt_b | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | u | r_1_prt_r2_2_prt_a | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | u | r_1_prt_r2_2_prt_a | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | u | r_1_prt_r2_2_prt_b | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | u | r_1_prt_r2_2_prt_b | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | u | r_1_prt_r1_r_key_r_name_key1 | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | u | r_1_prt_r1_r_key_r_name_key1 | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r1_r_key_r_name_key1 | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | u | r_1_prt_r2_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | u | r_1_prt_r2_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| (32 rows) |
| |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| --------------------+-------------+-----------+-------------------------------------+-------------------------------------+----------------- |
| r | | r | r_r_key_r_name_key | r_r_key_r_name_key | u |
| r_1_prt_r1 | r | r | r_1_prt_r1_r_key_r_name_key1 | r_1_prt_r1_r_key_r_name_key1 | u |
| r_1_prt_r1_2_prt_a | r_1_prt_r1 | r | r_1_prt_r1_2_prt_a_r_key_r_name_key | r_1_prt_r1_2_prt_a_r_key_r_name_key | u |
| r_1_prt_r1_2_prt_b | r_1_prt_r1 | r | r_1_prt_r1_2_prt_b_r_key_r_name_key | r_1_prt_r1_2_prt_b_r_key_r_name_key | u |
| r_1_prt_r2 | r | r | r_1_prt_r2_r_key_r_name_key | r_1_prt_r2_r_key_r_name_key | u |
| r_1_prt_r2_2_prt_a | r_1_prt_r2 | r | r_1_prt_r2_2_prt_a_r_key_r_name_key | r_1_prt_r2_2_prt_a_r_key_r_name_key | u |
| r_1_prt_r2_2_prt_b | r_1_prt_r2 | r | r_1_prt_r2_2_prt_b_r_key_r_name_key | r_1_prt_r2_2_prt_b_r_key_r_name_key | u |
| (7 rows) |
| |
| ALTER TABLE r ALTER PARTITION r1 ADD PARTITION c VALUES ('C'); |
| SELECT * FROM dependencies_show_for_cons_idx(); |
| depname | classtype | refname | refclasstype | classid | objsubid | refclassid | refobjsubid | deptype |
| -------------------------------------+-----------+-------------------------------------+--------------+---------------+----------+---------------+-------------+--------- |
| r_1_prt_r1_r_key_r_name_key1 | I | r_1_prt_r1_r_key_r_name_key1 | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_r_key_r_name_key | I | r_1_prt_r2_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_r_key_r_name_key | I | r_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | i | r_1_prt_r1_2_prt_a | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | i | r_1_prt_r1_2_prt_b | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_c_r_key_r_name_key | i | r_1_prt_r1_2_prt_c | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | i | r_1_prt_r2_2_prt_a | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | i | r_1_prt_r2_2_prt_b | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | i | r_1_prt_r1_2_prt_a_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | i | r_1_prt_r1_2_prt_b_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_c_r_key_r_name_key | i | r_1_prt_r1_2_prt_c_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | i | r_1_prt_r2_2_prt_a_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | i | r_1_prt_r2_2_prt_b_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | u | r_1_prt_r1_2_prt_a | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | u | r_1_prt_r1_2_prt_b | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_c_r_key_r_name_key | u | r_1_prt_r1_2_prt_c | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | u | r_1_prt_r2_2_prt_a | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | u | r_1_prt_r2_2_prt_b | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | u | r_1_prt_r1_2_prt_a | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | u | r_1_prt_r1_2_prt_a | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | u | r_1_prt_r1_2_prt_b | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | u | r_1_prt_r1_2_prt_b | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_2_prt_c_r_key_r_name_key | u | r_1_prt_r1_2_prt_c | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_2_prt_c_r_key_r_name_key | u | r_1_prt_r1_2_prt_c | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | u | r_1_prt_r2_2_prt_a | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | u | r_1_prt_r2_2_prt_a | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | u | r_1_prt_r2_2_prt_b | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | u | r_1_prt_r2_2_prt_b | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | u | r_1_prt_r1_r_key_r_name_key1 | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | u | r_1_prt_r1_r_key_r_name_key1 | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r1_2_prt_c_r_key_r_name_key | u | r_1_prt_r1_r_key_r_name_key1 | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r1_r_key_r_name_key1 | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | u | r_1_prt_r2_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | u | r_1_prt_r2_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| (38 rows) |
| |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| --------------------+-------------+-----------+-------------------------------------+-------------------------------------+----------------- |
| r | | r | r_r_key_r_name_key | r_r_key_r_name_key | u |
| r_1_prt_r1 | r | r | r_1_prt_r1_r_key_r_name_key1 | r_1_prt_r1_r_key_r_name_key1 | u |
| r_1_prt_r1_2_prt_a | r_1_prt_r1 | r | r_1_prt_r1_2_prt_a_r_key_r_name_key | r_1_prt_r1_2_prt_a_r_key_r_name_key | u |
| r_1_prt_r1_2_prt_b | r_1_prt_r1 | r | r_1_prt_r1_2_prt_b_r_key_r_name_key | r_1_prt_r1_2_prt_b_r_key_r_name_key | u |
| r_1_prt_r1_2_prt_c | r_1_prt_r1 | r | r_1_prt_r1_2_prt_c_r_key_r_name_key | r_1_prt_r1_2_prt_c_r_key_r_name_key | u |
| r_1_prt_r2 | r | r | r_1_prt_r2_r_key_r_name_key | r_1_prt_r2_r_key_r_name_key | u |
| r_1_prt_r2_2_prt_a | r_1_prt_r2 | r | r_1_prt_r2_2_prt_a_r_key_r_name_key | r_1_prt_r2_2_prt_a_r_key_r_name_key | u |
| r_1_prt_r2_2_prt_b | r_1_prt_r2 | r | r_1_prt_r2_2_prt_b_r_key_r_name_key | r_1_prt_r2_2_prt_b_r_key_r_name_key | u |
| (8 rows) |
| |
| -- EXCHANGE... prepare table e2 and swap with partition |
| SELECT recreate_three_level_table(); |
| recreate_three_level_table |
| ---------------------------- |
| |
| (1 row) |
| |
| ALTER TABLE r ADD UNIQUE(r_key,r_name); |
| SELECT * FROM dependencies_show_for_cons_idx(); |
| depname | classtype | refname | refclasstype | classid | objsubid | refclassid | refobjsubid | deptype |
| -------------------------------------+-----------+-------------------------------------+--------------+---------------+----------+---------------+-------------+--------- |
| r_1_prt_r1_r_key_r_name_key1 | I | r_1_prt_r1_r_key_r_name_key1 | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_r_key_r_name_key | I | r_1_prt_r2_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_r_key_r_name_key | I | r_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | i | r_1_prt_r1_2_prt_a | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | i | r_1_prt_r1_2_prt_b | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | i | r_1_prt_r2_2_prt_a | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | i | r_1_prt_r2_2_prt_b | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | i | r_1_prt_r1_2_prt_a_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | i | r_1_prt_r1_2_prt_b_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | i | r_1_prt_r2_2_prt_a_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | i | r_1_prt_r2_2_prt_b_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | u | r_1_prt_r1_2_prt_a | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | u | r_1_prt_r1_2_prt_b | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | u | r_1_prt_r2_2_prt_a | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | u | r_1_prt_r2_2_prt_b | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | u | r_1_prt_r1_2_prt_a | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | u | r_1_prt_r1_2_prt_a | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | u | r_1_prt_r1_2_prt_b | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | u | r_1_prt_r1_2_prt_b | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | u | r_1_prt_r2_2_prt_a | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | u | r_1_prt_r2_2_prt_a | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | u | r_1_prt_r2_2_prt_b | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | u | r_1_prt_r2_2_prt_b | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | u | r_1_prt_r1_r_key_r_name_key1 | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | u | r_1_prt_r1_r_key_r_name_key1 | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r1_r_key_r_name_key1 | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | u | r_1_prt_r2_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | u | r_1_prt_r2_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| (32 rows) |
| |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| --------------------+-------------+-----------+-------------------------------------+-------------------------------------+----------------- |
| r | | r | r_r_key_r_name_key | r_r_key_r_name_key | u |
| r_1_prt_r1 | r | r | r_1_prt_r1_r_key_r_name_key1 | r_1_prt_r1_r_key_r_name_key1 | u |
| r_1_prt_r1_2_prt_a | r_1_prt_r1 | r | r_1_prt_r1_2_prt_a_r_key_r_name_key | r_1_prt_r1_2_prt_a_r_key_r_name_key | u |
| r_1_prt_r1_2_prt_b | r_1_prt_r1 | r | r_1_prt_r1_2_prt_b_r_key_r_name_key | r_1_prt_r1_2_prt_b_r_key_r_name_key | u |
| r_1_prt_r2 | r | r | r_1_prt_r2_r_key_r_name_key | r_1_prt_r2_r_key_r_name_key | u |
| r_1_prt_r2_2_prt_a | r_1_prt_r2 | r | r_1_prt_r2_2_prt_a_r_key_r_name_key | r_1_prt_r2_2_prt_a_r_key_r_name_key | u |
| r_1_prt_r2_2_prt_b | r_1_prt_r2 | r | r_1_prt_r2_2_prt_b_r_key_r_name_key | r_1_prt_r2_2_prt_b_r_key_r_name_key | u |
| (7 rows) |
| |
| CREATE TABLE e2 (LIKE r INCLUDING CONSTRAINTS INCLUDING INDEXES); |
| NOTICE: table doesn't have 'DISTRIBUTED BY' clause, defaulting to distribution columns from LIKE table |
| SELECT * FROM dependencies_show_for_cons_idx(); |
| depname | classtype | refname | refclasstype | classid | objsubid | refclassid | refobjsubid | deptype |
| -------------------------------------+-----------+-------------------------------------+--------------+---------------+----------+---------------+-------------+--------- |
| r_1_prt_r1_r_key_r_name_key1 | I | r_1_prt_r1_r_key_r_name_key1 | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_r_key_r_name_key | I | r_1_prt_r2_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_r_key_r_name_key | I | r_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | i | r_1_prt_r1_2_prt_a | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | i | r_1_prt_r1_2_prt_b | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | i | r_1_prt_r2_2_prt_a | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | i | r_1_prt_r2_2_prt_b | r | pg_class | 0 | pg_class | 0 | S |
| e2_r_key_r_name_key | i | e2_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | i | r_1_prt_r1_2_prt_a_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | i | r_1_prt_r1_2_prt_b_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | i | r_1_prt_r2_2_prt_a_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | i | r_1_prt_r2_2_prt_b_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | u | r_1_prt_r1_2_prt_a | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | u | r_1_prt_r1_2_prt_b | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | u | r_1_prt_r2_2_prt_a | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | u | r_1_prt_r2_2_prt_b | r | pg_constraint | 0 | pg_class | 0 | S |
| e2_r_key_r_name_key | u | e2 | r | pg_constraint | 0 | pg_class | 1 | a |
| e2_r_key_r_name_key | u | e2 | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | u | r_1_prt_r1_2_prt_a | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | u | r_1_prt_r1_2_prt_a | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | u | r_1_prt_r1_2_prt_b | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | u | r_1_prt_r1_2_prt_b | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | u | r_1_prt_r2_2_prt_a | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | u | r_1_prt_r2_2_prt_a | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | u | r_1_prt_r2_2_prt_b | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | u | r_1_prt_r2_2_prt_b | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | u | r_1_prt_r1_r_key_r_name_key1 | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | u | r_1_prt_r1_r_key_r_name_key1 | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r1_r_key_r_name_key1 | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | u | r_1_prt_r2_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | u | r_1_prt_r2_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| (35 rows) |
| |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| --------------------+-------------+-----------+-------------------------------------+-------------------------------------+----------------- |
| r | | r | r_r_key_r_name_key | r_r_key_r_name_key | u |
| r_1_prt_r1 | r | r | r_1_prt_r1_r_key_r_name_key1 | r_1_prt_r1_r_key_r_name_key1 | u |
| r_1_prt_r1_2_prt_a | r_1_prt_r1 | r | r_1_prt_r1_2_prt_a_r_key_r_name_key | r_1_prt_r1_2_prt_a_r_key_r_name_key | u |
| r_1_prt_r1_2_prt_b | r_1_prt_r1 | r | r_1_prt_r1_2_prt_b_r_key_r_name_key | r_1_prt_r1_2_prt_b_r_key_r_name_key | u |
| r_1_prt_r2 | r | r | r_1_prt_r2_r_key_r_name_key | r_1_prt_r2_r_key_r_name_key | u |
| r_1_prt_r2_2_prt_a | r_1_prt_r2 | r | r_1_prt_r2_2_prt_a_r_key_r_name_key | r_1_prt_r2_2_prt_a_r_key_r_name_key | u |
| r_1_prt_r2_2_prt_b | r_1_prt_r2 | r | r_1_prt_r2_2_prt_b_r_key_r_name_key | r_1_prt_r2_2_prt_b_r_key_r_name_key | u |
| (7 rows) |
| |
| ALTER TABLE r ALTER PARTITION r1 EXCHANGE PARTITION a WITH TABLE e2; |
| SELECT * FROM dependencies_show_for_cons_idx(); |
| depname | classtype | refname | refclasstype | classid | objsubid | refclassid | refobjsubid | deptype |
| -------------------------------------+-----------+-------------------------------------+--------------+---------------+----------+---------------+-------------+--------- |
| r_1_prt_r1_r_key_r_name_key1 | I | r_1_prt_r1_r_key_r_name_key1 | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_r_key_r_name_key | I | r_1_prt_r2_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_r_key_r_name_key | I | r_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| e2_r_key_r_name_key | i | r_1_prt_r1_2_prt_a | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | i | r_1_prt_r1_2_prt_b | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | i | r_1_prt_r2_2_prt_a | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | i | r_1_prt_r2_2_prt_b | r | pg_class | 0 | pg_class | 0 | S |
| e2_r_key_r_name_key | i | e2_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | i | r_1_prt_r1_2_prt_a_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | i | r_1_prt_r1_2_prt_b_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | i | r_1_prt_r2_2_prt_a_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | i | r_1_prt_r2_2_prt_b_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| e2_r_key_r_name_key | u | r_1_prt_r1_2_prt_a | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | u | r_1_prt_r1_2_prt_b | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | u | r_1_prt_r2_2_prt_a | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | u | r_1_prt_r2_2_prt_b | r | pg_constraint | 0 | pg_class | 0 | S |
| e2_r_key_r_name_key | u | r_1_prt_r1_2_prt_a | r | pg_constraint | 0 | pg_class | 1 | a |
| e2_r_key_r_name_key | u | r_1_prt_r1_2_prt_a | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | u | e2 | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | u | e2 | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | u | r_1_prt_r1_2_prt_b | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | u | r_1_prt_r1_2_prt_b | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | u | r_1_prt_r2_2_prt_a | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | u | r_1_prt_r2_2_prt_a | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | u | r_1_prt_r2_2_prt_b | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | u | r_1_prt_r2_2_prt_b | r | pg_constraint | 0 | pg_class | 2 | a |
| e2_r_key_r_name_key | u | r_1_prt_r1_r_key_r_name_key1 | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | u | r_1_prt_r1_r_key_r_name_key1 | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r1_r_key_r_name_key1 | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | u | r_1_prt_r2_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | u | r_1_prt_r2_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| (35 rows) |
| |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| --------------------+-------------+-----------+-------------------------------------+-------------------------------------+----------------- |
| r | | r | r_r_key_r_name_key | r_r_key_r_name_key | u |
| r_1_prt_r1 | r | r | r_1_prt_r1_r_key_r_name_key1 | r_1_prt_r1_r_key_r_name_key1 | u |
| r_1_prt_r1_2_prt_a | r_1_prt_r1 | r | e2_r_key_r_name_key | e2_r_key_r_name_key | u |
| r_1_prt_r1_2_prt_b | r_1_prt_r1 | r | r_1_prt_r1_2_prt_b_r_key_r_name_key | r_1_prt_r1_2_prt_b_r_key_r_name_key | u |
| r_1_prt_r2 | r | r | r_1_prt_r2_r_key_r_name_key | r_1_prt_r2_r_key_r_name_key | u |
| r_1_prt_r2_2_prt_a | r_1_prt_r2 | r | r_1_prt_r2_2_prt_a_r_key_r_name_key | r_1_prt_r2_2_prt_a_r_key_r_name_key | u |
| r_1_prt_r2_2_prt_b | r_1_prt_r2 | r | r_1_prt_r2_2_prt_b_r_key_r_name_key | r_1_prt_r2_2_prt_b_r_key_r_name_key | u |
| (7 rows) |
| |
| -- UNIQUE: create constraint inside CREATE TABLE DDL...this is different |
| DROP TABLE IF EXISTS r; |
| CREATE TABLE r (r_key INTEGER NOT NULL,r_name CHAR(25), UNIQUE(r_key, r_name)) |
| DISTRIBUTED BY (r_key) PARTITION BY range (r_key) |
| SUBPARTITION BY list (r_name) SUBPARTITION TEMPLATE |
| (SUBPARTITION a VALUES ('A'),SUBPARTITION b VALUES ('B')) |
| (PARTITION r1 START (0),PARTITION r2 START (5) END (8)); |
| SELECT * FROM dependencies_show_for_cons_idx(); |
| depname | classtype | refname | refclasstype | classid | objsubid | refclassid | refobjsubid | deptype |
| --------------------------------------+-----------+--------------------------------------+--------------+---------------+----------+---------------+-------------+--------- |
| r_1_prt_r1_r_key_r_name_key1 | I | r_1_prt_r1_r_key_r_name_key1 | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_r_key_r_name_key | I | r_1_prt_r2_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_r_key_r_name_key | I | r_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_a_r_key_r_name_key1 | i | r_1_prt_r1_2_prt_a | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | i | r_1_prt_r1_2_prt_b | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | i | r_1_prt_r2_2_prt_a | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | i | r_1_prt_r2_2_prt_b | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | i | r_1_prt_r1_2_prt_a_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_a_r_key_r_name_key1 | i | r_1_prt_r1_2_prt_a_r_key_r_name_key1 | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | i | r_1_prt_r1_2_prt_b_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | i | r_1_prt_r2_2_prt_a_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | i | r_1_prt_r2_2_prt_b_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_a_r_key_r_name_key1 | u | r_1_prt_r1_2_prt_a | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | u | r_1_prt_r1_2_prt_b | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | u | r_1_prt_r2_2_prt_a | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | u | r_1_prt_r2_2_prt_b | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | u | e2 | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | u | e2 | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_key1 | u | r_1_prt_r1_2_prt_a | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_key1 | u | r_1_prt_r1_2_prt_a | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | u | r_1_prt_r1_2_prt_b | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | u | r_1_prt_r1_2_prt_b | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | u | r_1_prt_r2_2_prt_a | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | u | r_1_prt_r2_2_prt_a | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | u | r_1_prt_r2_2_prt_b | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | u | r_1_prt_r2_2_prt_b | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_key1 | u | r_1_prt_r1_r_key_r_name_key1 | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r1_2_prt_b_r_key_r_name_key | u | r_1_prt_r1_r_key_r_name_key1 | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r1_r_key_r_name_key1 | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_2_prt_a_r_key_r_name_key | u | r_1_prt_r2_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_2_prt_b_r_key_r_name_key | u | r_1_prt_r2_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_r_key_r_name_key | u | r_r_key_r_name_key | u | pg_constraint | 0 | pg_constraint | 0 | P |
| (35 rows) |
| |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| --------------------+-------------+-----------+--------------------------------------+--------------------------------------+----------------- |
| r | | r | r_r_key_r_name_key | r_r_key_r_name_key | u |
| r_1_prt_r1 | r | r | r_1_prt_r1_r_key_r_name_key1 | r_1_prt_r1_r_key_r_name_key1 | u |
| r_1_prt_r1_2_prt_a | r_1_prt_r1 | r | r_1_prt_r1_2_prt_a_r_key_r_name_key1 | r_1_prt_r1_2_prt_a_r_key_r_name_key1 | u |
| r_1_prt_r1_2_prt_b | r_1_prt_r1 | r | r_1_prt_r1_2_prt_b_r_key_r_name_key | r_1_prt_r1_2_prt_b_r_key_r_name_key | u |
| r_1_prt_r2 | r | r | r_1_prt_r2_r_key_r_name_key | r_1_prt_r2_r_key_r_name_key | u |
| r_1_prt_r2_2_prt_a | r_1_prt_r2 | r | r_1_prt_r2_2_prt_a_r_key_r_name_key | r_1_prt_r2_2_prt_a_r_key_r_name_key | u |
| r_1_prt_r2_2_prt_b | r_1_prt_r2 | r | r_1_prt_r2_2_prt_b_r_key_r_name_key | r_1_prt_r2_2_prt_b_r_key_r_name_key | u |
| (7 rows) |
| |
| ALTER TABLE r DROP CONSTRAINT r_r_key_r_name_key; |
| SELECT * FROM dependencies_show_for_cons_idx(); |
| depname | classtype | refname | refclasstype | classid | objsubid | refclassid | refobjsubid | deptype |
| -------------------------------------+-----------+-------------------------------------+--------------+---------------+----------+---------------+-------------+--------- |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | i | r_1_prt_r1_2_prt_a_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | u | e2 | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | u | e2 | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 2 | a |
| (6 rows) |
| |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| --------------------+-------------+-----------+-----------------+------------+----------------- |
| r | | r | | | |
| r_1_prt_r1 | r | r | | | |
| r_1_prt_r1_2_prt_a | r_1_prt_r1 | r | | | |
| r_1_prt_r1_2_prt_b | r_1_prt_r1 | r | | | |
| r_1_prt_r2 | r | r | | | |
| r_1_prt_r2_2_prt_a | r_1_prt_r2 | r | | | |
| r_1_prt_r2_2_prt_b | r_1_prt_r2 | r | | | |
| (7 rows) |
| |
| -- PRIMARY: create constraint inside CREATE TABLE DDL...this is different |
| DROP TABLE IF EXISTS r; |
| CREATE TABLE r (r_key INTEGER NOT NULL,r_name CHAR(25), PRIMARY KEY(r_key, r_name)) |
| DISTRIBUTED BY (r_key) PARTITION BY range (r_key) |
| SUBPARTITION BY list (r_name) SUBPARTITION TEMPLATE |
| (SUBPARTITION a VALUES ('A'),SUBPARTITION b VALUES ('B')) |
| (PARTITION r1 START (0),PARTITION r2 START (5) END (8)); |
| SELECT * FROM dependencies_show_for_cons_idx(); |
| depname | classtype | refname | refclasstype | classid | objsubid | refclassid | refobjsubid | deptype |
| -------------------------------------+-----------+-------------------------------------+--------------+---------------+----------+---------------+-------------+--------- |
| r_1_prt_r1_pkey | I | r_1_prt_r1_pkey | p | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_pkey | I | r_1_prt_r2_pkey | p | pg_class | 0 | pg_constraint | 0 | i |
| r_pkey | I | r_pkey | p | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_a_pkey | i | r_1_prt_r1_2_prt_a_pkey | p | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_b_pkey | i | r_1_prt_r1_2_prt_b_pkey | p | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_2_prt_a_pkey | i | r_1_prt_r2_2_prt_a_pkey | p | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r2_2_prt_b_pkey | i | r_1_prt_r2_2_prt_b_pkey | p | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_a_pkey | i | r_1_prt_r1_2_prt_a | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_b_pkey | i | r_1_prt_r1_2_prt_b | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_a_pkey | i | r_1_prt_r2_2_prt_a | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_b_pkey | i | r_1_prt_r2_2_prt_b | r | pg_class | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | i | r_1_prt_r1_2_prt_a_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_a_pkey | p | r_1_prt_r1_pkey | p | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r1_2_prt_b_pkey | p | r_1_prt_r1_pkey | p | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r1_pkey | p | r_pkey | p | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_2_prt_a_pkey | p | r_1_prt_r2_pkey | p | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_2_prt_b_pkey | p | r_1_prt_r2_pkey | p | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r2_pkey | p | r_pkey | p | pg_constraint | 0 | pg_constraint | 0 | P |
| r_1_prt_r1_2_prt_a_pkey | p | r_1_prt_r1_2_prt_a | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_b_pkey | p | r_1_prt_r1_2_prt_b | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_a_pkey | p | r_1_prt_r2_2_prt_a | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r2_2_prt_b_pkey | p | r_1_prt_r2_2_prt_b | r | pg_constraint | 0 | pg_class | 0 | S |
| r_1_prt_r1_2_prt_a_pkey | p | r_1_prt_r1_2_prt_a | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_2_prt_a_pkey | p | r_1_prt_r1_2_prt_a | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_2_prt_b_pkey | p | r_1_prt_r1_2_prt_b | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_2_prt_b_pkey | p | r_1_prt_r1_2_prt_b | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_2_prt_a_pkey | p | r_1_prt_r2_2_prt_a | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r2_2_prt_a_pkey | p | r_1_prt_r2_2_prt_a | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r2_2_prt_b_pkey | p | r_1_prt_r2_2_prt_b | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r2_2_prt_b_pkey | p | r_1_prt_r2_2_prt_b | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | u | e2 | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | u | e2 | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 2 | a |
| (35 rows) |
| |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| --------------------+-------------+-----------+-------------------------+-------------------------+----------------- |
| r | | r | r_pkey | r_pkey | p |
| r_1_prt_r1 | r | r | r_1_prt_r1_pkey | r_1_prt_r1_pkey | p |
| r_1_prt_r1_2_prt_a | r_1_prt_r1 | r | r_1_prt_r1_2_prt_a_pkey | r_1_prt_r1_2_prt_a_pkey | p |
| r_1_prt_r1_2_prt_b | r_1_prt_r1 | r | r_1_prt_r1_2_prt_b_pkey | r_1_prt_r1_2_prt_b_pkey | p |
| r_1_prt_r2 | r | r | r_1_prt_r2_pkey | r_1_prt_r2_pkey | p |
| r_1_prt_r2_2_prt_a | r_1_prt_r2 | r | r_1_prt_r2_2_prt_a_pkey | r_1_prt_r2_2_prt_a_pkey | p |
| r_1_prt_r2_2_prt_b | r_1_prt_r2 | r | r_1_prt_r2_2_prt_b_pkey | r_1_prt_r2_2_prt_b_pkey | p |
| (7 rows) |
| |
| ALTER TABLE r DROP CONSTRAINT r_pkey; |
| SELECT * FROM dependencies_show_for_cons_idx(); |
| depname | classtype | refname | refclasstype | classid | objsubid | refclassid | refobjsubid | deptype |
| -------------------------------------+-----------+-------------------------------------+--------------+---------------+----------+---------------+-------------+--------- |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | i | r_1_prt_r1_2_prt_a_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_r_key_r_name_key | i | r_1_prt_r1_r_key_r_name_key | u | pg_class | 0 | pg_constraint | 0 | i |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | u | e2 | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_key | u | e2 | r | pg_constraint | 0 | pg_class | 2 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 1 | a |
| r_1_prt_r1_r_key_r_name_key | u | e | r | pg_constraint | 0 | pg_class | 2 | a |
| (6 rows) |
| |
| SELECT * FROM partition_tables_show_all('r'); |
| partition_name | parent_name | root_name | constraint_name | index_name | constraint_type |
| --------------------+-------------+-----------+-----------------+------------+----------------- |
| r | | r | | | |
| r_1_prt_r1 | r | r | | | |
| r_1_prt_r1_2_prt_a | r_1_prt_r1 | r | | | |
| r_1_prt_r1_2_prt_b | r_1_prt_r1 | r | | | |
| r_1_prt_r2 | r | r | | | |
| r_1_prt_r2_2_prt_a | r_1_prt_r2 | r | | | |
| r_1_prt_r2_2_prt_b | r_1_prt_r2 | r | | | |
| (7 rows) |
| |
| -- PARTITIONED INDEX TESTS-------------- |
| -- UNIQUE index: validate we can add a unique index to any node in the partition |
| -- hierarchy and that that index is added to all descendents. Furthermore, no |
| -- descendent can remove that index; it can only be removed from the creating |
| -- node. |
| --create the index at the root; should only be able to drop it from root |
| SELECT recreate_three_level_table(); |
| recreate_three_level_table |
| ---------------------------- |
| |
| (1 row) |
| |
| CREATE UNIQUE INDEX myidx_onroot ON r USING btree(r_key,r_name); |
| SELECT * FROM dependencies_show_for_idx(); |
| depname | refname | deptype |
| -------------------------------------+--------------------+--------- |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | S |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx | r_1_prt_r2_2_prt_a | S |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx | r_1_prt_r2_2_prt_a | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx | r_1_prt_r2_2_prt_a | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx | r_1_prt_r2_2_prt_b | S |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx | r_1_prt_r2_2_prt_b | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx | r_1_prt_r2_2_prt_b | a |
| (12 rows) |
| |
| DROP INDEX r_1_prt_r2_r_key_r_name_idx; --should fail: cannot drop from non-creating node |
| ERROR: cannot drop index r_1_prt_r2_r_key_r_name_idx because index myidx_onroot requires it |
| HINT: You can drop index myidx_onroot instead. |
| SELECT * FROM dependencies_show_for_idx(); |
| depname | refname | deptype |
| -------------------------------------+--------------------+--------- |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | S |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx | r_1_prt_r2_2_prt_a | S |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx | r_1_prt_r2_2_prt_a | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx | r_1_prt_r2_2_prt_a | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx | r_1_prt_r2_2_prt_b | S |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx | r_1_prt_r2_2_prt_b | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx | r_1_prt_r2_2_prt_b | a |
| (12 rows) |
| |
| DROP INDEX r_1_prt_r2_2_prt_b_r_key_r_name_idx; --should fail: cannot drop from non-creating node |
| ERROR: cannot drop index r_1_prt_r2_2_prt_b_r_key_r_name_idx because index r_1_prt_r2_r_key_r_name_idx requires it |
| HINT: You can drop index r_1_prt_r2_r_key_r_name_idx instead. |
| SELECT * FROM dependencies_show_for_idx(); |
| depname | refname | deptype |
| -------------------------------------+--------------------+--------- |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | S |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx | r_1_prt_r2_2_prt_a | S |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx | r_1_prt_r2_2_prt_a | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx | r_1_prt_r2_2_prt_a | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx | r_1_prt_r2_2_prt_b | S |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx | r_1_prt_r2_2_prt_b | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx | r_1_prt_r2_2_prt_b | a |
| (12 rows) |
| |
| DROP INDEX myidx_onroot; --works: is root of index hierarchy |
| SELECT * FROM dependencies_show_for_idx(); |
| depname | refname | deptype |
| ---------+---------+--------- |
| (0 rows) |
| |
| --create the index starting at mid-level; should only be able to drop it from mid-level |
| SELECT recreate_three_level_table(); |
| recreate_three_level_table |
| ---------------------------- |
| |
| (1 row) |
| |
| CREATE UNIQUE INDEX myidx_midlevel ON r_1_prt_r1 USING btree(r_key, r_name); |
| SELECT * FROM dependencies_show_for_idx(); |
| depname | refname | deptype |
| -------------------------------------+--------------------+--------- |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | S |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| (6 rows) |
| |
| DROP INDEX r_1_prt_r1_2_prt_a_r_key_r_name_idx; --should fail: cannot drop from non-creating node |
| ERROR: cannot drop index r_1_prt_r1_2_prt_a_r_key_r_name_idx because index myidx_midlevel requires it |
| HINT: You can drop index myidx_midlevel instead. |
| SELECT * FROM dependencies_show_for_idx(); |
| depname | refname | deptype |
| -------------------------------------+--------------------+--------- |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | S |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| (6 rows) |
| |
| DROP INDEX myidx_midlevel; --works: is root of index hierarchy |
| SELECT * FROM dependencies_show_for_idx(); |
| depname | refname | deptype |
| ---------+---------+--------- |
| (0 rows) |
| |
| --we can create more than one index on a table(same as upstream 11) |
| --yes, this is inconsistent with index subsumption but upstream does it this way |
| --in particular, there's no subsumption going on here. |
| SELECT recreate_three_level_table(); |
| recreate_three_level_table |
| ---------------------------- |
| |
| (1 row) |
| |
| CREATE UNIQUE INDEX ON r USING btree(r_key,r_name); |
| SELECT * FROM dependencies_show_for_idx(); |
| depname | refname | deptype |
| -------------------------------------+--------------------+--------- |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | S |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx | r_1_prt_r2_2_prt_a | S |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx | r_1_prt_r2_2_prt_a | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx | r_1_prt_r2_2_prt_a | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx | r_1_prt_r2_2_prt_b | S |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx | r_1_prt_r2_2_prt_b | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx | r_1_prt_r2_2_prt_b | a |
| (12 rows) |
| |
| CREATE UNIQUE INDEX ON r USING btree(r_key,r_name); |
| SELECT * FROM dependencies_show_for_idx(); |
| depname | refname | deptype |
| --------------------------------------+--------------------+--------- |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | S |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx1 | r_1_prt_r1_2_prt_a | S |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx1 | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx1 | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx1 | r_1_prt_r1_2_prt_b | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx1 | r_1_prt_r1_2_prt_b | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx1 | r_1_prt_r1_2_prt_b | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx | r_1_prt_r2_2_prt_a | S |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx | r_1_prt_r2_2_prt_a | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx | r_1_prt_r2_2_prt_a | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx1 | r_1_prt_r2_2_prt_a | S |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx1 | r_1_prt_r2_2_prt_a | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx1 | r_1_prt_r2_2_prt_a | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx | r_1_prt_r2_2_prt_b | S |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx | r_1_prt_r2_2_prt_b | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx | r_1_prt_r2_2_prt_b | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx1 | r_1_prt_r2_2_prt_b | S |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx1 | r_1_prt_r2_2_prt_b | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx1 | r_1_prt_r2_2_prt_b | a |
| (24 rows) |
| |
| --test subsumption of lower-level index from upper-level one |
| SELECT recreate_three_level_table(); |
| recreate_three_level_table |
| ---------------------------- |
| |
| (1 row) |
| |
| CREATE UNIQUE INDEX myidx_midlevel ON r_1_prt_r1 USING btree(r_key, r_name); |
| SELECT * FROM dependencies_show_for_idx(); |
| depname | refname | deptype |
| -------------------------------------+--------------------+--------- |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | S |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| (6 rows) |
| |
| CREATE UNIQUE INDEX myidx_onroot ON r USING btree(r_key,r_name); |
| SELECT * FROM dependencies_show_for_idx(); |
| depname | refname | deptype |
| -------------------------------------+--------------------+--------- |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | S |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx | r_1_prt_r2_2_prt_a | S |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx | r_1_prt_r2_2_prt_a | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx | r_1_prt_r2_2_prt_a | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx | r_1_prt_r2_2_prt_b | S |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx | r_1_prt_r2_2_prt_b | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx | r_1_prt_r2_2_prt_b | a |
| (12 rows) |
| |
| --show subsumption works across rename |
| SELECT recreate_three_level_table(); |
| recreate_three_level_table |
| ---------------------------- |
| |
| (1 row) |
| |
| CREATE UNIQUE INDEX myidx_midlevel ON r_1_prt_r1 USING btree(r_key, r_name); |
| SELECT * FROM dependencies_show_for_idx(); |
| depname | refname | deptype |
| -------------------------------------+--------------------+--------- |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | S |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| (6 rows) |
| |
| ALTER INDEX myidx_midlevel RENAME TO myidx_midlevel_renamed; |
| SELECT * FROM dependencies_show_for_idx(); |
| depname | refname | deptype |
| -------------------------------------+--------------------+--------- |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | S |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| (6 rows) |
| |
| CREATE UNIQUE INDEX myidx_midlevel ON r USING btree(r_key,r_name); |
| SELECT * FROM dependencies_show_for_idx(); |
| depname | refname | deptype |
| -------------------------------------+--------------------+--------- |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | S |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx | r_1_prt_r2_2_prt_a | S |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx | r_1_prt_r2_2_prt_a | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx | r_1_prt_r2_2_prt_a | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx | r_1_prt_r2_2_prt_b | S |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx | r_1_prt_r2_2_prt_b | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx | r_1_prt_r2_2_prt_b | a |
| (12 rows) |
| |
| --show that renaming still does not allow a name conflict |
| SELECT recreate_three_level_table(); |
| recreate_three_level_table |
| ---------------------------- |
| |
| (1 row) |
| |
| CREATE UNIQUE INDEX myidx_midlevel ON r_1_prt_r1 USING btree(r_key, r_name); |
| SELECT * FROM dependencies_show_for_idx(); |
| depname | refname | deptype |
| -------------------------------------+--------------------+--------- |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | S |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| (6 rows) |
| |
| ALTER INDEX myidx_midlevel RENAME TO myidx_midlevel_renamed; |
| SELECT * FROM dependencies_show_for_idx(); |
| depname | refname | deptype |
| -------------------------------------+--------------------+--------- |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | S |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| (6 rows) |
| |
| CREATE UNIQUE INDEX myidx_midlevel_renamed ON r USING btree(r_key,r_name); --should fail: index already exists |
| ERROR: relation "myidx_midlevel_renamed" already exists |
| SELECT * FROM dependencies_show_for_idx(); |
| depname | refname | deptype |
| -------------------------------------+--------------------+--------- |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | S |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| (6 rows) |
| |
| --show that renaming a mid-level index still prevents it from being dropped. |
| SELECT recreate_three_level_table(); |
| recreate_three_level_table |
| ---------------------------- |
| |
| (1 row) |
| |
| CREATE UNIQUE INDEX myidx_onroot ON r USING btree(r_key,r_name); |
| SELECT * FROM dependencies_show_for_idx(); |
| depname | refname | deptype |
| -------------------------------------+--------------------+--------- |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | S |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx | r_1_prt_r2_2_prt_a | S |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx | r_1_prt_r2_2_prt_a | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx | r_1_prt_r2_2_prt_a | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx | r_1_prt_r2_2_prt_b | S |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx | r_1_prt_r2_2_prt_b | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx | r_1_prt_r2_2_prt_b | a |
| (12 rows) |
| |
| ALTER INDEX r_1_prt_r1_r_key_r_name_idx RENAME TO middle_index_renamed; |
| SELECT * FROM dependencies_show_for_idx(); |
| depname | refname | deptype |
| -------------------------------------+--------------------+--------- |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | S |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx | r_1_prt_r2_2_prt_a | S |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx | r_1_prt_r2_2_prt_a | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx | r_1_prt_r2_2_prt_a | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx | r_1_prt_r2_2_prt_b | S |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx | r_1_prt_r2_2_prt_b | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx | r_1_prt_r2_2_prt_b | a |
| (12 rows) |
| |
| DROP INDEX middle_index_renamed; --should fail: this renamed index is still controlled by the root index that created it |
| ERROR: cannot drop index middle_index_renamed because index myidx_onroot requires it |
| HINT: You can drop index myidx_onroot instead. |
| SELECT * FROM dependencies_show_for_idx(); |
| depname | refname | deptype |
| -------------------------------------+--------------------+--------- |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | S |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_a_r_key_r_name_idx | r_1_prt_r1_2_prt_a | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | S |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| r_1_prt_r1_2_prt_b_r_key_r_name_idx | r_1_prt_r1_2_prt_b | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx | r_1_prt_r2_2_prt_a | S |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx | r_1_prt_r2_2_prt_a | a |
| r_1_prt_r2_2_prt_a_r_key_r_name_idx | r_1_prt_r2_2_prt_a | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx | r_1_prt_r2_2_prt_b | S |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx | r_1_prt_r2_2_prt_b | a |
| r_1_prt_r2_2_prt_b_r_key_r_name_idx | r_1_prt_r2_2_prt_b | a |
| (12 rows) |
| |
| DROP TABLE IF EXISTS r; |