Add tests for foreign partitions.
Amit Langote, reviewed by Ashutosh Bapat Discussion: http://postgr.es/m/475dd52c-be4a-9b32-6d54-3044a00c93d9@lab.ntt.co.jp
This commit is contained in:
parent
fcec6caafa
commit
0d130c7abc
@ -1751,6 +1751,201 @@ DETAIL: user mapping for regress_test_role on server s5 depends on server s5
|
|||||||
HINT: Use DROP ... CASCADE to drop the dependent objects too.
|
HINT: Use DROP ... CASCADE to drop the dependent objects too.
|
||||||
DROP OWNED BY regress_test_role2 CASCADE;
|
DROP OWNED BY regress_test_role2 CASCADE;
|
||||||
NOTICE: drop cascades to user mapping for regress_test_role on server s5
|
NOTICE: drop cascades to user mapping for regress_test_role on server s5
|
||||||
|
-- Foreign partition DDL stuff
|
||||||
|
CREATE TABLE pt2 (
|
||||||
|
c1 integer NOT NULL,
|
||||||
|
c2 text,
|
||||||
|
c3 date
|
||||||
|
) PARTITION BY LIST (c1);
|
||||||
|
CREATE FOREIGN TABLE pt2_1 PARTITION OF pt2 FOR VALUES IN (1)
|
||||||
|
SERVER s0 OPTIONS (delimiter ',', quote '"', "be quoted" 'value');
|
||||||
|
\d+ pt2
|
||||||
|
Table "public.pt2"
|
||||||
|
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
|
||||||
|
--------+---------+-----------+----------+---------+----------+--------------+-------------
|
||||||
|
c1 | integer | | not null | | plain | |
|
||||||
|
c2 | text | | | | extended | |
|
||||||
|
c3 | date | | | | plain | |
|
||||||
|
Partition key: LIST (c1)
|
||||||
|
Partitions: pt2_1 FOR VALUES IN (1)
|
||||||
|
|
||||||
|
\d+ pt2_1
|
||||||
|
Foreign table "public.pt2_1"
|
||||||
|
Column | Type | Collation | Nullable | Default | FDW Options | Storage | Stats target | Description
|
||||||
|
--------+---------+-----------+----------+---------+-------------+----------+--------------+-------------
|
||||||
|
c1 | integer | | not null | | | plain | |
|
||||||
|
c2 | text | | | | | extended | |
|
||||||
|
c3 | date | | | | | plain | |
|
||||||
|
Partition of: pt2 FOR VALUES IN (1)
|
||||||
|
Server: s0
|
||||||
|
FDW Options: (delimiter ',', quote '"', "be quoted" 'value')
|
||||||
|
|
||||||
|
-- partition cannot have additional columns
|
||||||
|
DROP FOREIGN TABLE pt2_1;
|
||||||
|
CREATE FOREIGN TABLE pt2_1 (
|
||||||
|
c1 integer NOT NULL,
|
||||||
|
c2 text,
|
||||||
|
c3 date,
|
||||||
|
c4 char
|
||||||
|
) SERVER s0 OPTIONS (delimiter ',', quote '"', "be quoted" 'value');
|
||||||
|
\d+ pt2_1
|
||||||
|
Foreign table "public.pt2_1"
|
||||||
|
Column | Type | Collation | Nullable | Default | FDW Options | Storage | Stats target | Description
|
||||||
|
--------+--------------+-----------+----------+---------+-------------+----------+--------------+-------------
|
||||||
|
c1 | integer | | not null | | | plain | |
|
||||||
|
c2 | text | | | | | extended | |
|
||||||
|
c3 | date | | | | | plain | |
|
||||||
|
c4 | character(1) | | | | | extended | |
|
||||||
|
Server: s0
|
||||||
|
FDW Options: (delimiter ',', quote '"', "be quoted" 'value')
|
||||||
|
|
||||||
|
ALTER TABLE pt2 ATTACH PARTITION pt2_1 FOR VALUES IN (1); -- ERROR
|
||||||
|
ERROR: table "pt2_1" contains column "c4" not found in parent "pt2"
|
||||||
|
DETAIL: New partition should contain only the columns present in parent.
|
||||||
|
DROP FOREIGN TABLE pt2_1;
|
||||||
|
\d+ pt2
|
||||||
|
Table "public.pt2"
|
||||||
|
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
|
||||||
|
--------+---------+-----------+----------+---------+----------+--------------+-------------
|
||||||
|
c1 | integer | | not null | | plain | |
|
||||||
|
c2 | text | | | | extended | |
|
||||||
|
c3 | date | | | | plain | |
|
||||||
|
Partition key: LIST (c1)
|
||||||
|
|
||||||
|
CREATE FOREIGN TABLE pt2_1 (
|
||||||
|
c1 integer NOT NULL,
|
||||||
|
c2 text,
|
||||||
|
c3 date
|
||||||
|
) SERVER s0 OPTIONS (delimiter ',', quote '"', "be quoted" 'value');
|
||||||
|
\d+ pt2_1
|
||||||
|
Foreign table "public.pt2_1"
|
||||||
|
Column | Type | Collation | Nullable | Default | FDW Options | Storage | Stats target | Description
|
||||||
|
--------+---------+-----------+----------+---------+-------------+----------+--------------+-------------
|
||||||
|
c1 | integer | | not null | | | plain | |
|
||||||
|
c2 | text | | | | | extended | |
|
||||||
|
c3 | date | | | | | plain | |
|
||||||
|
Server: s0
|
||||||
|
FDW Options: (delimiter ',', quote '"', "be quoted" 'value')
|
||||||
|
|
||||||
|
-- no attach partition validation occurs for foreign tables
|
||||||
|
ALTER TABLE pt2 ATTACH PARTITION pt2_1 FOR VALUES IN (1);
|
||||||
|
\d+ pt2
|
||||||
|
Table "public.pt2"
|
||||||
|
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
|
||||||
|
--------+---------+-----------+----------+---------+----------+--------------+-------------
|
||||||
|
c1 | integer | | not null | | plain | |
|
||||||
|
c2 | text | | | | extended | |
|
||||||
|
c3 | date | | | | plain | |
|
||||||
|
Partition key: LIST (c1)
|
||||||
|
Partitions: pt2_1 FOR VALUES IN (1)
|
||||||
|
|
||||||
|
\d+ pt2_1
|
||||||
|
Foreign table "public.pt2_1"
|
||||||
|
Column | Type | Collation | Nullable | Default | FDW Options | Storage | Stats target | Description
|
||||||
|
--------+---------+-----------+----------+---------+-------------+----------+--------------+-------------
|
||||||
|
c1 | integer | | not null | | | plain | |
|
||||||
|
c2 | text | | | | | extended | |
|
||||||
|
c3 | date | | | | | plain | |
|
||||||
|
Partition of: pt2 FOR VALUES IN (1)
|
||||||
|
Server: s0
|
||||||
|
FDW Options: (delimiter ',', quote '"', "be quoted" 'value')
|
||||||
|
|
||||||
|
-- cannot add column to a partition
|
||||||
|
ALTER TABLE pt2_1 ADD c4 char;
|
||||||
|
ERROR: cannot add column to a partition
|
||||||
|
-- ok to have a partition's own constraints though
|
||||||
|
ALTER TABLE pt2_1 ALTER c3 SET NOT NULL;
|
||||||
|
ALTER TABLE pt2_1 ADD CONSTRAINT p21chk CHECK (c2 <> '');
|
||||||
|
\d+ pt2
|
||||||
|
Table "public.pt2"
|
||||||
|
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
|
||||||
|
--------+---------+-----------+----------+---------+----------+--------------+-------------
|
||||||
|
c1 | integer | | not null | | plain | |
|
||||||
|
c2 | text | | | | extended | |
|
||||||
|
c3 | date | | | | plain | |
|
||||||
|
Partition key: LIST (c1)
|
||||||
|
Partitions: pt2_1 FOR VALUES IN (1)
|
||||||
|
|
||||||
|
\d+ pt2_1
|
||||||
|
Foreign table "public.pt2_1"
|
||||||
|
Column | Type | Collation | Nullable | Default | FDW Options | Storage | Stats target | Description
|
||||||
|
--------+---------+-----------+----------+---------+-------------+----------+--------------+-------------
|
||||||
|
c1 | integer | | not null | | | plain | |
|
||||||
|
c2 | text | | | | | extended | |
|
||||||
|
c3 | date | | not null | | | plain | |
|
||||||
|
Partition of: pt2 FOR VALUES IN (1)
|
||||||
|
Check constraints:
|
||||||
|
"p21chk" CHECK (c2 <> ''::text)
|
||||||
|
Server: s0
|
||||||
|
FDW Options: (delimiter ',', quote '"', "be quoted" 'value')
|
||||||
|
|
||||||
|
-- cannot drop inherited NOT NULL constraint from a partition
|
||||||
|
ALTER TABLE pt2_1 ALTER c1 DROP NOT NULL;
|
||||||
|
ERROR: column "c1" is marked NOT NULL in parent table
|
||||||
|
-- partition must have parent's constraints
|
||||||
|
ALTER TABLE pt2 DETACH PARTITION pt2_1;
|
||||||
|
ALTER TABLE pt2 ALTER c2 SET NOT NULL;
|
||||||
|
\d+ pt2
|
||||||
|
Table "public.pt2"
|
||||||
|
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
|
||||||
|
--------+---------+-----------+----------+---------+----------+--------------+-------------
|
||||||
|
c1 | integer | | not null | | plain | |
|
||||||
|
c2 | text | | not null | | extended | |
|
||||||
|
c3 | date | | | | plain | |
|
||||||
|
Partition key: LIST (c1)
|
||||||
|
|
||||||
|
\d+ pt2_1
|
||||||
|
Foreign table "public.pt2_1"
|
||||||
|
Column | Type | Collation | Nullable | Default | FDW Options | Storage | Stats target | Description
|
||||||
|
--------+---------+-----------+----------+---------+-------------+----------+--------------+-------------
|
||||||
|
c1 | integer | | not null | | | plain | |
|
||||||
|
c2 | text | | | | | extended | |
|
||||||
|
c3 | date | | not null | | | plain | |
|
||||||
|
Check constraints:
|
||||||
|
"p21chk" CHECK (c2 <> ''::text)
|
||||||
|
Server: s0
|
||||||
|
FDW Options: (delimiter ',', quote '"', "be quoted" 'value')
|
||||||
|
|
||||||
|
ALTER TABLE pt2 ATTACH PARTITION pt2_1 FOR VALUES IN (1); -- ERROR
|
||||||
|
ERROR: column "c2" in child table must be marked NOT NULL
|
||||||
|
ALTER FOREIGN TABLE pt2_1 ALTER c2 SET NOT NULL;
|
||||||
|
ALTER TABLE pt2 ATTACH PARTITION pt2_1 FOR VALUES IN (1);
|
||||||
|
ALTER TABLE pt2 DETACH PARTITION pt2_1;
|
||||||
|
ALTER TABLE pt2 ADD CONSTRAINT pt2chk1 CHECK (c1 > 0);
|
||||||
|
\d+ pt2
|
||||||
|
Table "public.pt2"
|
||||||
|
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
|
||||||
|
--------+---------+-----------+----------+---------+----------+--------------+-------------
|
||||||
|
c1 | integer | | not null | | plain | |
|
||||||
|
c2 | text | | not null | | extended | |
|
||||||
|
c3 | date | | | | plain | |
|
||||||
|
Partition key: LIST (c1)
|
||||||
|
Check constraints:
|
||||||
|
"pt2chk1" CHECK (c1 > 0)
|
||||||
|
|
||||||
|
\d+ pt2_1
|
||||||
|
Foreign table "public.pt2_1"
|
||||||
|
Column | Type | Collation | Nullable | Default | FDW Options | Storage | Stats target | Description
|
||||||
|
--------+---------+-----------+----------+---------+-------------+----------+--------------+-------------
|
||||||
|
c1 | integer | | not null | | | plain | |
|
||||||
|
c2 | text | | not null | | | extended | |
|
||||||
|
c3 | date | | not null | | | plain | |
|
||||||
|
Check constraints:
|
||||||
|
"p21chk" CHECK (c2 <> ''::text)
|
||||||
|
Server: s0
|
||||||
|
FDW Options: (delimiter ',', quote '"', "be quoted" 'value')
|
||||||
|
|
||||||
|
ALTER TABLE pt2 ATTACH PARTITION pt2_1 FOR VALUES IN (1); -- ERROR
|
||||||
|
ERROR: child table is missing constraint "pt2chk1"
|
||||||
|
ALTER FOREIGN TABLE pt2_1 ADD CONSTRAINT pt2chk1 CHECK (c1 > 0);
|
||||||
|
ALTER TABLE pt2 ATTACH PARTITION pt2_1 FOR VALUES IN (1);
|
||||||
|
-- TRUNCATE doesn't work on foreign tables, either directly or recursively
|
||||||
|
TRUNCATE pt2_1; -- ERROR
|
||||||
|
ERROR: "pt2_1" is not a table
|
||||||
|
TRUNCATE pt2; -- ERROR
|
||||||
|
ERROR: "pt2_1" is not a table
|
||||||
|
DROP FOREIGN TABLE pt2_1;
|
||||||
|
DROP TABLE pt2;
|
||||||
-- Cleanup
|
-- Cleanup
|
||||||
DROP SCHEMA foreign_schema CASCADE;
|
DROP SCHEMA foreign_schema CASCADE;
|
||||||
DROP ROLE regress_test_role; -- ERROR
|
DROP ROLE regress_test_role; -- ERROR
|
||||||
|
@ -684,6 +684,77 @@ REASSIGN OWNED BY regress_test_role TO regress_test_role2;
|
|||||||
DROP OWNED BY regress_test_role2;
|
DROP OWNED BY regress_test_role2;
|
||||||
DROP OWNED BY regress_test_role2 CASCADE;
|
DROP OWNED BY regress_test_role2 CASCADE;
|
||||||
|
|
||||||
|
-- Foreign partition DDL stuff
|
||||||
|
CREATE TABLE pt2 (
|
||||||
|
c1 integer NOT NULL,
|
||||||
|
c2 text,
|
||||||
|
c3 date
|
||||||
|
) PARTITION BY LIST (c1);
|
||||||
|
CREATE FOREIGN TABLE pt2_1 PARTITION OF pt2 FOR VALUES IN (1)
|
||||||
|
SERVER s0 OPTIONS (delimiter ',', quote '"', "be quoted" 'value');
|
||||||
|
\d+ pt2
|
||||||
|
\d+ pt2_1
|
||||||
|
|
||||||
|
-- partition cannot have additional columns
|
||||||
|
DROP FOREIGN TABLE pt2_1;
|
||||||
|
CREATE FOREIGN TABLE pt2_1 (
|
||||||
|
c1 integer NOT NULL,
|
||||||
|
c2 text,
|
||||||
|
c3 date,
|
||||||
|
c4 char
|
||||||
|
) SERVER s0 OPTIONS (delimiter ',', quote '"', "be quoted" 'value');
|
||||||
|
\d+ pt2_1
|
||||||
|
ALTER TABLE pt2 ATTACH PARTITION pt2_1 FOR VALUES IN (1); -- ERROR
|
||||||
|
|
||||||
|
DROP FOREIGN TABLE pt2_1;
|
||||||
|
\d+ pt2
|
||||||
|
CREATE FOREIGN TABLE pt2_1 (
|
||||||
|
c1 integer NOT NULL,
|
||||||
|
c2 text,
|
||||||
|
c3 date
|
||||||
|
) SERVER s0 OPTIONS (delimiter ',', quote '"', "be quoted" 'value');
|
||||||
|
\d+ pt2_1
|
||||||
|
-- no attach partition validation occurs for foreign tables
|
||||||
|
ALTER TABLE pt2 ATTACH PARTITION pt2_1 FOR VALUES IN (1);
|
||||||
|
\d+ pt2
|
||||||
|
\d+ pt2_1
|
||||||
|
|
||||||
|
-- cannot add column to a partition
|
||||||
|
ALTER TABLE pt2_1 ADD c4 char;
|
||||||
|
|
||||||
|
-- ok to have a partition's own constraints though
|
||||||
|
ALTER TABLE pt2_1 ALTER c3 SET NOT NULL;
|
||||||
|
ALTER TABLE pt2_1 ADD CONSTRAINT p21chk CHECK (c2 <> '');
|
||||||
|
\d+ pt2
|
||||||
|
\d+ pt2_1
|
||||||
|
|
||||||
|
-- cannot drop inherited NOT NULL constraint from a partition
|
||||||
|
ALTER TABLE pt2_1 ALTER c1 DROP NOT NULL;
|
||||||
|
|
||||||
|
-- partition must have parent's constraints
|
||||||
|
ALTER TABLE pt2 DETACH PARTITION pt2_1;
|
||||||
|
ALTER TABLE pt2 ALTER c2 SET NOT NULL;
|
||||||
|
\d+ pt2
|
||||||
|
\d+ pt2_1
|
||||||
|
ALTER TABLE pt2 ATTACH PARTITION pt2_1 FOR VALUES IN (1); -- ERROR
|
||||||
|
ALTER FOREIGN TABLE pt2_1 ALTER c2 SET NOT NULL;
|
||||||
|
ALTER TABLE pt2 ATTACH PARTITION pt2_1 FOR VALUES IN (1);
|
||||||
|
|
||||||
|
ALTER TABLE pt2 DETACH PARTITION pt2_1;
|
||||||
|
ALTER TABLE pt2 ADD CONSTRAINT pt2chk1 CHECK (c1 > 0);
|
||||||
|
\d+ pt2
|
||||||
|
\d+ pt2_1
|
||||||
|
ALTER TABLE pt2 ATTACH PARTITION pt2_1 FOR VALUES IN (1); -- ERROR
|
||||||
|
ALTER FOREIGN TABLE pt2_1 ADD CONSTRAINT pt2chk1 CHECK (c1 > 0);
|
||||||
|
ALTER TABLE pt2 ATTACH PARTITION pt2_1 FOR VALUES IN (1);
|
||||||
|
|
||||||
|
-- TRUNCATE doesn't work on foreign tables, either directly or recursively
|
||||||
|
TRUNCATE pt2_1; -- ERROR
|
||||||
|
TRUNCATE pt2; -- ERROR
|
||||||
|
|
||||||
|
DROP FOREIGN TABLE pt2_1;
|
||||||
|
DROP TABLE pt2;
|
||||||
|
|
||||||
-- Cleanup
|
-- Cleanup
|
||||||
DROP SCHEMA foreign_schema CASCADE;
|
DROP SCHEMA foreign_schema CASCADE;
|
||||||
DROP ROLE regress_test_role; -- ERROR
|
DROP ROLE regress_test_role; -- ERROR
|
||||||
|
Loading…
x
Reference in New Issue
Block a user