diff --git a/doc/src/sgml/ddl.sgml b/doc/src/sgml/ddl.sgml index 2e7804e..cca54bc 100644 --- a/doc/src/sgml/ddl.sgml +++ b/doc/src/sgml/ddl.sgml @@ -515,8 +515,8 @@ CREATE TABLE people ( Generated columns may be skipped during logical replication according to the - CREATE PUBLICATION option - + CREATE PUBLICATION parameter + publish_generated_columns. diff --git a/doc/src/sgml/ref/create_publication.sgml b/doc/src/sgml/ref/create_publication.sgml index e133dc3..cd20bd4 100644 --- a/doc/src/sgml/ref/create_publication.sgml +++ b/doc/src/sgml/ref/create_publication.sgml @@ -223,7 +223,7 @@ CREATE PUBLICATION name - + publish_generated_columns (boolean) @@ -231,14 +231,6 @@ CREATE PUBLICATION name associated with the publication should be replicated. The default is false. - - This option is only available for replicating generated column data from the publisher - to a regular, non-generated column in the subscriber. - - - This parameter can only be set true if copy_data is - set to false. - diff --git a/src/backend/catalog/pg_publication.c b/src/backend/catalog/pg_publication.c index 272b6a1..7ebb851 100644 --- a/src/backend/catalog/pg_publication.c +++ b/src/backend/catalog/pg_publication.c @@ -999,7 +999,7 @@ GetPublication(Oid pubid) pub->pubactions.pubdelete = pubform->pubdelete; pub->pubactions.pubtruncate = pubform->pubtruncate; pub->pubviaroot = pubform->pubviaroot; - pub->pubgencolumns = pubform->pubgencolumns; + pub->pubgencols = pubform->pubgencols; ReleaseSysCache(tup); @@ -1211,7 +1211,7 @@ pg_get_publication_tables(PG_FUNCTION_ARGS) if (att->attisdropped) continue; - if (att->attgenerated && !pub->pubgencolumns) + if (att->attgenerated && !pub->pubgencols) continue; attnums[nattnums++] = att->attnum; diff --git a/src/backend/commands/publicationcmds.c b/src/backend/commands/publicationcmds.c index 6242a09..0129db1 100644 --- a/src/backend/commands/publicationcmds.c +++ b/src/backend/commands/publicationcmds.c @@ -808,7 +808,7 @@ CreatePublication(ParseState *pstate, CreatePublicationStmt *stmt) BoolGetDatum(pubactions.pubtruncate); values[Anum_pg_publication_pubviaroot - 1] = BoolGetDatum(publish_via_partition_root); - values[Anum_pg_publication_pubgencolumns - 1] = + values[Anum_pg_publication_pubgencols - 1] = BoolGetDatum(publish_generated_columns); tup = heap_form_tuple(RelationGetDescr(rel), values, nulls); @@ -1018,11 +1018,10 @@ AlterPublicationOptions(ParseState *pstate, AlterPublicationStmt *stmt, replaces[Anum_pg_publication_pubviaroot - 1] = true; } - if (publish_generated_columns_given) { - values[Anum_pg_publication_pubgencolumns - 1] = BoolGetDatum(publish_generated_columns); - replaces[Anum_pg_publication_pubgencolumns - 1] = true; + values[Anum_pg_publication_pubgencols - 1] = BoolGetDatum(publish_generated_columns); + replaces[Anum_pg_publication_pubgencols - 1] = true; } tup = heap_modify_tuple(tup, RelationGetDescr(rel), values, nulls, diff --git a/src/backend/replication/pgoutput/pgoutput.c b/src/backend/replication/pgoutput/pgoutput.c index 5a39d4f..c91ae3c 100644 --- a/src/backend/replication/pgoutput/pgoutput.c +++ b/src/backend/replication/pgoutput/pgoutput.c @@ -1076,7 +1076,7 @@ pgoutput_column_list_init(PGOutputData *data, List *publications, * then it is treated the same as if there are no column lists (even * if other publications have a list). */ - if (!pub->alltables || !pub->pubgencolumns) + if (!pub->alltables || !pub->pubgencols) { bool pub_no_list = true; @@ -1100,7 +1100,7 @@ pgoutput_column_list_init(PGOutputData *data, List *publications, } /* Build the column list bitmap in the per-entry context. */ - if (!pub_no_list || !pub->pubgencolumns) /* when not null */ + if (!pub_no_list || !pub->pubgencols) /* when not null */ { int i; int nliveatts = 0; @@ -1123,10 +1123,10 @@ pgoutput_column_list_init(PGOutputData *data, List *publications, continue; /* - * Skip generated column if pubgencolumns option was not - * specified. + * Skip generated column if publish_generated_columns parameter + * was not specified. */ - if (pub_no_list && att->attgenerated && !pub->pubgencolumns) + if (pub_no_list && att->attgenerated && !pub->pubgencols) cols = bms_del_member(cols, i + 1); nliveatts++; diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 06fda22..64fb898 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -4282,7 +4282,7 @@ getPublications(Archive *fout) int i_pubdelete; int i_pubtruncate; int i_pubviaroot; - int i_pubgencolumns; + int i_pubgencols; int i, ntups; @@ -4298,7 +4298,7 @@ getPublications(Archive *fout) appendPQExpBufferStr(query, "SELECT p.tableoid, p.oid, p.pubname, " "p.pubowner, " - "p.puballtables, p.pubinsert, p.pubupdate, p.pubdelete, p.pubtruncate, p.pubviaroot, p.pubgencolumns " + "p.puballtables, p.pubinsert, p.pubupdate, p.pubdelete, p.pubtruncate, p.pubviaroot, p.pubgencols " "FROM pg_publication p"); else if (fout->remoteVersion >= 130000) appendPQExpBufferStr(query, @@ -4333,7 +4333,7 @@ getPublications(Archive *fout) i_pubdelete = PQfnumber(res, "pubdelete"); i_pubtruncate = PQfnumber(res, "pubtruncate"); i_pubviaroot = PQfnumber(res, "pubviaroot"); - i_pubgencolumns = PQfnumber(res, "pubgencolumns"); + i_pubgencols = PQfnumber(res, "pubgencols"); pubinfo = pg_malloc(ntups * sizeof(PublicationInfo)); @@ -4358,8 +4358,8 @@ getPublications(Archive *fout) (strcmp(PQgetvalue(res, i, i_pubtruncate), "t") == 0); pubinfo[i].pubviaroot = (strcmp(PQgetvalue(res, i, i_pubviaroot), "t") == 0); - pubinfo[i].pubgencolumns = - (strcmp(PQgetvalue(res, i, i_pubgencolumns), "t") == 0); + pubinfo[i].pubgencols = + (strcmp(PQgetvalue(res, i, i_pubgencols), "t") == 0); /* Decide whether we want to dump it */ selectDumpableObject(&(pubinfo[i].dobj), fout); @@ -4439,7 +4439,7 @@ dumpPublication(Archive *fout, const PublicationInfo *pubinfo) if (pubinfo->pubviaroot) appendPQExpBufferStr(query, ", publish_via_partition_root = true"); - if (pubinfo->pubgencolumns) + if (pubinfo->pubgencols) appendPQExpBufferStr(query, ", publish_generated_columns = true"); appendPQExpBufferStr(query, ");\n"); diff --git a/src/bin/pg_dump/pg_dump.h b/src/bin/pg_dump/pg_dump.h index de9783c..4002f94 100644 --- a/src/bin/pg_dump/pg_dump.h +++ b/src/bin/pg_dump/pg_dump.h @@ -625,7 +625,7 @@ typedef struct _PublicationInfo bool pubdelete; bool pubtruncate; bool pubviaroot; - bool pubgencolumns; + bool pubgencols; } PublicationInfo; /* diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c index 983962b..b8d8b4d 100644 --- a/src/bin/psql/describe.c +++ b/src/bin/psql/describe.c @@ -6266,7 +6266,7 @@ listPublications(const char *pattern) gettext_noop("Via root")); if (pset.sversion >= 180000) appendPQExpBuffer(&buf, - ",\n pubgencolumns AS \"%s\"", + ",\n pubgencols AS \"%s\"", gettext_noop("Generated columns")); appendPQExpBufferStr(&buf, "\nFROM pg_catalog.pg_publication\n"); @@ -6356,7 +6356,7 @@ describePublications(const char *pattern) PGresult *res; bool has_pubtruncate; bool has_pubviaroot; - bool has_pubgencol; + bool has_pubgencols; PQExpBufferData title; printTableContent cont; @@ -6373,7 +6373,7 @@ describePublications(const char *pattern) has_pubtruncate = (pset.sversion >= 110000); has_pubviaroot = (pset.sversion >= 130000); - has_pubgencol = (pset.sversion >= 180000); + has_pubgencols = (pset.sversion >= 180000); initPQExpBuffer(&buf); @@ -6387,9 +6387,9 @@ describePublications(const char *pattern) if (has_pubviaroot) appendPQExpBufferStr(&buf, ", pubviaroot"); - if (has_pubgencol) + if (has_pubgencols) appendPQExpBufferStr(&buf, - ", pubgencolumns"); + ", pubgencols"); appendPQExpBufferStr(&buf, "\nFROM pg_catalog.pg_publication\n"); @@ -6441,7 +6441,7 @@ describePublications(const char *pattern) ncols++; if (has_pubviaroot) ncols++; - if (has_pubgencol) + if (has_pubgencols) ncols++; initPQExpBuffer(&title); @@ -6457,7 +6457,7 @@ describePublications(const char *pattern) printTableAddHeader(&cont, gettext_noop("Truncates"), true, align); if (has_pubviaroot) printTableAddHeader(&cont, gettext_noop("Via root"), true, align); - if (has_pubgencol) + if (has_pubgencols) printTableAddHeader(&cont, gettext_noop("Generated columns"), true, align); printTableAddCell(&cont, PQgetvalue(res, i, 2), false, false); @@ -6469,7 +6469,7 @@ describePublications(const char *pattern) printTableAddCell(&cont, PQgetvalue(res, i, 7), false, false); if (has_pubviaroot) printTableAddCell(&cont, PQgetvalue(res, i, 8), false, false); - if (has_pubgencol) + if (has_pubgencols) printTableAddCell(&cont, PQgetvalue(res, i, 9), false, false); if (!puballtables) diff --git a/src/include/catalog/pg_publication.h b/src/include/catalog/pg_publication.h index fc85a64..849b3a0 100644 --- a/src/include/catalog/pg_publication.h +++ b/src/include/catalog/pg_publication.h @@ -56,7 +56,7 @@ CATALOG(pg_publication,6104,PublicationRelationId) bool pubviaroot; /* true if generated columns data should be published */ - bool pubgencolumns; + bool pubgencols; } FormData_pg_publication; /* ---------------- @@ -106,7 +106,7 @@ typedef struct Publication char *name; bool alltables; bool pubviaroot; - bool pubgencolumns; + bool pubgencols; PublicationActions pubactions; } Publication; diff --git a/src/test/regress/expected/publication.out b/src/test/regress/expected/publication.out index ab703e2..f083d4f 100644 --- a/src/test/regress/expected/publication.out +++ b/src/test/regress/expected/publication.out @@ -1753,9 +1753,9 @@ DROP PUBLICATION pub; DROP TABLE sch1.tbl1; DROP SCHEMA sch1 cascade; DROP SCHEMA sch2 cascade; --- Test the publication with or without 'PUBLISH_GENERATED_COLUMNS' parameter +-- Test the publication 'publish_generated_columns' parameter enabled or disabled SET client_min_messages = 'ERROR'; -CREATE PUBLICATION pub1 FOR ALL TABLES WITH (PUBLISH_GENERATED_COLUMNS=1); +CREATE PUBLICATION pub1 FOR ALL TABLES WITH (publish_generated_columns=1); \dRp+ pub1 Publication pub1 Owner | All tables | Inserts | Updates | Deletes | Truncates | Via root | Generated columns @@ -1763,7 +1763,7 @@ CREATE PUBLICATION pub1 FOR ALL TABLES WITH (PUBLISH_GENERATED_COLUMNS=1); regress_publication_user | t | t | t | t | t | f | t (1 row) -CREATE PUBLICATION pub2 FOR ALL TABLES WITH (PUBLISH_GENERATED_COLUMNS=0); +CREATE PUBLICATION pub2 FOR ALL TABLES WITH (publish_generated_columns=0); \dRp+ pub2 Publication pub2 Owner | All tables | Inserts | Updates | Deletes | Truncates | Via root | Generated columns diff --git a/src/test/regress/sql/publication.sql b/src/test/regress/sql/publication.sql index 2673397..78101b9 100644 --- a/src/test/regress/sql/publication.sql +++ b/src/test/regress/sql/publication.sql @@ -1112,12 +1112,12 @@ DROP TABLE sch1.tbl1; DROP SCHEMA sch1 cascade; DROP SCHEMA sch2 cascade; --- Test the publication with or without 'PUBLISH_GENERATED_COLUMNS' parameter +-- Test the publication 'publish_generated_columns' parameter enabled or disabled SET client_min_messages = 'ERROR'; -CREATE PUBLICATION pub1 FOR ALL TABLES WITH (PUBLISH_GENERATED_COLUMNS=1); +CREATE PUBLICATION pub1 FOR ALL TABLES WITH (publish_generated_columns=1); \dRp+ pub1 -CREATE PUBLICATION pub2 FOR ALL TABLES WITH (PUBLISH_GENERATED_COLUMNS=0); +CREATE PUBLICATION pub2 FOR ALL TABLES WITH (publish_generated_columns=0); \dRp+ pub2 RESET client_min_messages;