diff options
author | Peter Eisentraut <peter_e@gmx.net> | 2017-04-20 14:18:33 -0400 |
---|---|---|
committer | Peter Eisentraut <peter_e@gmx.net> | 2017-04-20 14:18:33 -0400 |
commit | 594b526bcf32e307b963ea77f10c9720d9ca423f (patch) | |
tree | a041056101ab5188323d4df292431eda3abfd5fc /src | |
parent | 3a66581dd12b4108ce22fb4dad38258df39cb685 (diff) | |
download | postgresql-594b526bcf32e307b963ea77f10c9720d9ca423f.tar.gz postgresql-594b526bcf32e307b963ea77f10c9720d9ca423f.zip |
Modify message when partitioned table is added to publication
Give a more specific error message than "xyz is not a table".
Also document in CREATE PUBLICATION which kinds of relations are not
supported.
based on patch by Amit Langote <Langote_Amit_f8@lab.ntt.co.jp>
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/catalog/pg_publication.c | 9 | ||||
-rw-r--r-- | src/test/regress/expected/publication.out | 7 | ||||
-rw-r--r-- | src/test/regress/sql/publication.sql | 4 |
3 files changed, 20 insertions, 0 deletions
diff --git a/src/backend/catalog/pg_publication.c b/src/backend/catalog/pg_publication.c index 9330e2380af..15f68a915b6 100644 --- a/src/backend/catalog/pg_publication.c +++ b/src/backend/catalog/pg_publication.c @@ -50,6 +50,15 @@ static void check_publication_add_relation(Relation targetrel) { + /* Give more specific error for partitioned tables */ + if (RelationGetForm(targetrel)->relkind == RELKIND_PARTITIONED_TABLE) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("\"%s\" is a partitioned table", + RelationGetRelationName(targetrel)), + errdetail("Adding partitioned tables to publications is not supported."), + errhint("You can add the table partitions individually."))); + /* Must be table */ if (RelationGetForm(targetrel)->relkind != RELKIND_RELATION) ereport(ERROR, diff --git a/src/test/regress/expected/publication.out b/src/test/regress/expected/publication.out index 5b7fb674dad..f3a348d368c 100644 --- a/src/test/regress/expected/publication.out +++ b/src/test/regress/expected/publication.out @@ -37,6 +37,7 @@ CREATE SCHEMA pub_test; CREATE TABLE testpub_tbl1 (id serial primary key, data text); CREATE TABLE pub_test.testpub_nopk (foo int, bar int); CREATE VIEW testpub_view AS SELECT 1; +CREATE TABLE testpub_parted (a int) PARTITION BY LIST (a); CREATE PUBLICATION testpub_foralltables FOR ALL TABLES WITH (nopublish delete, nopublish update); ALTER PUBLICATION testpub_foralltables WITH (publish update); CREATE TABLE testpub_tbl2 (id serial primary key, data text); @@ -118,6 +119,11 @@ Tables: ALTER PUBLICATION testpub_default ADD TABLE testpub_view; ERROR: "testpub_view" is not a table DETAIL: Only tables can be added to publications. +-- fail - partitioned table +ALTER PUBLICATION testpub_fortbl ADD TABLE testpub_parted; +ERROR: "testpub_parted" is a partitioned table +DETAIL: Adding partitioned tables to publications is not supported. +HINT: You can add the table partitions individually. ALTER PUBLICATION testpub_default ADD TABLE testpub_tbl1; ALTER PUBLICATION testpub_default SET TABLE testpub_tbl1; ALTER PUBLICATION testpub_default ADD TABLE pub_test.testpub_nopk; @@ -188,6 +194,7 @@ ALTER PUBLICATION testpub2 ADD TABLE testpub_tbl1; -- ok DROP PUBLICATION testpub2; SET ROLE regress_publication_user; REVOKE CREATE ON DATABASE regression FROM regress_publication_user2; +DROP TABLE testpub_parted; DROP VIEW testpub_view; DROP TABLE testpub_tbl1; \dRp+ testpub_default diff --git a/src/test/regress/sql/publication.sql b/src/test/regress/sql/publication.sql index b118bc9906f..7d1cba5db3e 100644 --- a/src/test/regress/sql/publication.sql +++ b/src/test/regress/sql/publication.sql @@ -26,6 +26,7 @@ CREATE SCHEMA pub_test; CREATE TABLE testpub_tbl1 (id serial primary key, data text); CREATE TABLE pub_test.testpub_nopk (foo int, bar int); CREATE VIEW testpub_view AS SELECT 1; +CREATE TABLE testpub_parted (a int) PARTITION BY LIST (a); CREATE PUBLICATION testpub_foralltables FOR ALL TABLES WITH (nopublish delete, nopublish update); ALTER PUBLICATION testpub_foralltables WITH (publish update); @@ -66,6 +67,8 @@ CREATE PUBLICATION testpub_fortbl FOR TABLE testpub_tbl1; -- fail - view ALTER PUBLICATION testpub_default ADD TABLE testpub_view; +-- fail - partitioned table +ALTER PUBLICATION testpub_fortbl ADD TABLE testpub_parted; ALTER PUBLICATION testpub_default ADD TABLE testpub_tbl1; ALTER PUBLICATION testpub_default SET TABLE testpub_tbl1; @@ -104,6 +107,7 @@ DROP PUBLICATION testpub2; SET ROLE regress_publication_user; REVOKE CREATE ON DATABASE regression FROM regress_publication_user2; +DROP TABLE testpub_parted; DROP VIEW testpub_view; DROP TABLE testpub_tbl1; |