Hi, When I read the documentation of ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (...), it says "set_publication_option" only support "refresh" in documentation [1]. However, we can also supply the "copy_data" option, and the code is:
case ALTER_SUBSCRIPTION_PUBLICATION: { bool copy_data; bool refresh; parse_subscription_options(stmt->options, NULL, /* no "connect" */ NULL, NULL, /* no "enabled" */ NULL, /* no "create_slot" */ NULL, NULL, /* no "slot_name" */ ©_data, NULL, /* no "synchronous_commit" */ &refresh, NULL, NULL, /* no "binary" */ NULL, NULL); /* no "streaming" */ values[Anum_pg_subscription_subpublications - 1] = publicationListToArray(stmt->publication); replaces[Anum_pg_subscription_subpublications - 1] = true; update_tuple = true; /* Refresh if user asked us to. */ if (refresh) { if (!sub->enabled) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("ALTER SUBSCRIPTION with refresh is not allowed for disabled subscriptions"), errhint("Use ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false)."))); /* Make sure refresh sees the new list of publications. */ sub->publications = stmt->publication; AlterSubscription_refresh(sub, copy_data); } break; } Should we fix the documentation or the code? I'd be inclined fix the documentation. [1] - https://www.postgresql.org/docs/devel/sql-altersubscription.html -- Regrads, Japin Li. ChengDu WenWu Information Technology Co.,Ltd.
diff --git a/doc/src/sgml/ref/alter_subscription.sgml b/doc/src/sgml/ref/alter_subscription.sgml index 97c427e0f4..418e9a8ce1 100644 --- a/doc/src/sgml/ref/alter_subscription.sgml +++ b/doc/src/sgml/ref/alter_subscription.sgml @@ -101,6 +101,17 @@ ALTER SUBSCRIPTION <replaceable class="parameter">name</replaceable> RENAME TO < </para> </listitem> </varlistentry> + <varlistentry> + <term><literal>copy_data</literal> (<type>boolean</type>)</term> + <listitem> + <para> + Specifies whether the existing data in the publications that are + being subscribed to should be copied once the replication starts. + The default is <literal>true</literal>. (Previously subscribed + tables are not copied.) + </para> + </listitem> + </varlistentry> </variablelist> Additionally, refresh options as described