On Wed, May 26, 2021 at 7:55 PM Bharath Rupireddy <bharath.rupireddyforpostg...@gmail.com> wrote: > > On Wed, May 26, 2021 at 7:38 PM vignesh C <vignes...@gmail.com> wrote: > > > Attaching v5 patch, please have a look. > > > > We get the following error while adding an index: > > create publication mypub for table idx_t1; > > ERROR: "idx_t1" is an index > > > > This error occurs internally from table_openrv function call, if we > > could replace this with relation_openrv and then check the table kind, > > we could throw a similar error message here too like the other changes > > in the patch. > > Do you say that we replace table_open in publication_add_relation with > relation_open and have the "\"%s\" is an index" or "\"%s\" is a > composite type" checks in check_publication_add_relation? If that is > so, I don't think it's a good idea to have the extra code in > check_publication_add_relation and I would like it to be the way it is > currently.
Before calling check_publication_add_relation, we will call OpenTableList to get the list of relations. In openTableList we don't include the errordetail for the failure like you have fixed it in check_publication_add_relation. When a user tries to add index objects or composite types, the error will be thrown earlier itself. I didn't mean to change check_publication_add_relation, I meant to change table_openrv to relation_openrv in OpenTableList and include error details in case of failure like the change attached. If you are ok, please include the change in your patch. Regards, Vignesh
diff --git a/src/backend/commands/publicationcmds.c b/src/backend/commands/publicationcmds.c index 95c253c8e0..b6380d7491 100644 --- a/src/backend/commands/publicationcmds.c +++ b/src/backend/commands/publicationcmds.c @@ -16,6 +16,7 @@ #include "access/genam.h" #include "access/htup_details.h" +#include "access/relation.h" #include "access/table.h" #include "access/xact.h" #include "catalog/catalog.h" @@ -523,7 +524,21 @@ OpenTableList(List *tables) /* Allow query cancel in case this takes a long time */ CHECK_FOR_INTERRUPTS(); - rel = table_openrv(rv, ShareUpdateExclusiveLock); + rel = relation_openrv(rv, ShareUpdateExclusiveLock); + if (rel->rd_rel->relkind == RELKIND_INDEX || + rel->rd_rel->relkind == RELKIND_PARTITIONED_INDEX) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("\"%s\" is an index", + RelationGetRelationName(rel)), + errdetail("Index objects not supported by publications."))); + else if (rel->rd_rel->relkind == RELKIND_COMPOSITE_TYPE) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("\"%s\" is a composite type", + RelationGetRelationName(rel)), + errdetail("Composite type not supported by publications."))); + myrelid = RelationGetRelid(rel); /*