On 2020-Sep-08, Bharath Rupireddy wrote: > + /* Find the remote attributes that are missing in the local relation. */ > + for (i = 0; i < remoterel->natts; i++) > + { > + if (!bms_is_member(i, localattnums)) > + { > + if (missingatts->len == 0) > + { > + appendStringInfoChar(missingatts, '"'); > + appendStringInfoString(missingatts, > remoterel->attnames[i]); > + } > + else if (missingatts->len > 0) > + { > + appendStringInfoChar(missingatts, ','); > + appendStringInfoChar(missingatts, '"'); > + appendStringInfo(missingatts, "%s", > remoterel->attnames[i]); > + } > + > + appendStringInfoChar(missingatts, '"'); > + }
This looks a bit fiddly. Would it be less cumbersome to use quote_identifier here instead? > ereport(ERROR, > > (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), > errmsg("logical replication target > relation \"%s.%s\" is missing " > - "some replicated > columns", > - remoterel->nspname, > remoterel->relname))); > + "replicated columns:%s", > + remoterel->nspname, > remoterel->relname, > + missingatts.data))); Please do use errmsg_plural -- have the new function return the number of missing columns. Should be pretty straightforward. -- Álvaro Herrera https://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services