diff --git a/src/backend/catalog/pg_publication.c b/src/backend/catalog/pg_publication.c index 36bfff9706..2a2fe03c13 100644 --- a/src/backend/catalog/pg_publication.c +++ b/src/backend/catalog/pg_publication.c @@ -54,23 +54,23 @@ check_publication_add_relation(Relation targetrel) RelationGetForm(targetrel)->relkind != RELKIND_PARTITIONED_TABLE) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("\"%s\" is not a table", + errmsg("cannot add relation \"%s\" to publication", RelationGetRelationName(targetrel)), - errdetail("Only tables can be added to publications."))); + errdetail_relkind_not_supported(RelationGetForm(targetrel)->relkind))); /* Can't be system table */ if (IsCatalogRelation(targetrel)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("\"%s\" is a system table", + errmsg("cannot add relation \"%s\" to publication", RelationGetRelationName(targetrel)), - errdetail("System tables cannot be added to publications."))); + errdetail("This operation is not supported for system tables."))); /* UNLOGGED and TEMP relations cannot be part of publication. */ if (!RelationIsPermanent(targetrel)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("table \"%s\" cannot be replicated", + errmsg("cannot add relation \"%s\" to publication", RelationGetRelationName(targetrel)), errdetail("Temporary and unlogged relations cannot be replicated."))); } diff --git a/src/backend/executor/execReplication.c b/src/backend/executor/execReplication.c index 1e285e0349..574d7d27fd 100644 --- a/src/backend/executor/execReplication.c +++ b/src/backend/executor/execReplication.c @@ -608,22 +608,10 @@ void CheckSubscriptionRelkind(char relkind, const char *nspname, const char *relname) { - /* - * Give a more specific error for foreign tables. - */ - if (relkind == RELKIND_FOREIGN_TABLE) - ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("cannot use relation \"%s.%s\" as logical replication target", - nspname, relname), - errdetail("\"%s.%s\" is a foreign table.", - nspname, relname))); - if (relkind != RELKIND_RELATION && relkind != RELKIND_PARTITIONED_TABLE) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), errmsg("cannot use relation \"%s.%s\" as logical replication target", nspname, relname), - errdetail("\"%s.%s\" is not a table.", - nspname, relname))); + errdetail_relkind_not_supported(relkind))); } diff --git a/src/test/regress/expected/publication.out b/src/test/regress/expected/publication.out index b5b065a1b6..4a5ef0bc24 100644 --- a/src/test/regress/expected/publication.out +++ b/src/test/regress/expected/publication.out @@ -160,8 +160,8 @@ DROP TABLE testpub_parted1; DROP PUBLICATION testpub_forparted, testpub_forparted1; -- fail - view CREATE PUBLICATION testpub_fortbl FOR TABLE testpub_view; -ERROR: "testpub_view" is not a table -DETAIL: Only tables can be added to publications. +ERROR: cannot add relation "testpub_view" to publication +DETAIL: This operation is not supported for views. SET client_min_messages = 'ERROR'; CREATE PUBLICATION testpub_fortbl FOR TABLE testpub_tbl1, pub_test.testpub_nopk; RESET client_min_messages; @@ -182,8 +182,8 @@ Tables: -- fail - view ALTER PUBLICATION testpub_default ADD TABLE testpub_view; -ERROR: "testpub_view" is not a table -DETAIL: Only tables can be added to publications. +ERROR: cannot add relation "testpub_view" to publication +DETAIL: This operation is not supported for views. 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;