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" */
                                           &copy_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

Reply via email to