On Sat, May 22, 2021 at 1:49 AM Mark Dilger
<mark.dil...@enterprisedb.com> wrote:
>
> -hackers,
>
> I think commit 82ed7748b710e3ddce3f7ebc74af80fe4869492f created some 
> confusion that should be cleaned up before release.  I'd like some guidance 
> on what the intended behavior is before I submit a patch for this, though:
>
> +ALTER SUBSCRIPTION mysubscription SET PUBLICATION nosuchpub WITH (copy_data 
> = false, refresh = false);
> +ALTER SUBSCRIPTION mysubscription ADD PUBLICATION nosuchpub WITH (copy_data 
> = false, refresh = false);
> +ALTER SUBSCRIPTION mysubscription DROP PUBLICATION nosuchpub WITH (copy_data 
> = false, refresh = false);
> +ERROR:  unrecognized subscription parameter: "copy_data"
> +ALTER SUBSCRIPTION mysubscription SET (copy_data = false, refresh = false);
> +ERROR:  unrecognized subscription parameter: "copy_data"
>
> First, it's quite odd to say that "copy_data" is unrecognized in the third 
> and fourth ALTER commands when it was recognized just fine in the first two.

For ALTER SUBSCRIPTION ... DROP PUBLICATION, copy_data option is not
required actually, because it doesn't add new publications. If the
concern here is "why refresh is allowed but not copy_data", then the
answer is "with the refresh option the updated publications can be
refreshed, this avoids users to run REFRESH PUBLICATION after DROP
PUBLICATION". So, disallowing copy_data makes sense to me.

For ALTER SUBSCRIPTION ... SET, allowed options are slot_name,
synchronous_commit, binary and streaming which are part of
pg_subscription catalog  and will be used by apply/sync workers.
Whereas copy_data and refresh are not part of pg_subscription catalog
and are not used by apply/sync workers (directly), but by the backend.
We have ALTER SUBSCRIPTION .. REFRESH specifically for refresh and
copy_data options.

> More than that, though, the docs in doc/src/sgml/ref/alter_subscription.sgml 
> refer to this part of the grammar in the first three ALTER commands as a 
> "set_publication_option", not as a "subscription_parameter", a term which is 
> only used in the grammar for other forms of the ALTER command.  Per the 
> grammar in the docs, "copy_data" is not a valid set_publication_option, only 
> "refresh" is.

set_publication_option - options are refresh and copy_data (this
option comes implicitly, please see the note "Additionally, refresh
options as described under REFRESH PUBLICATION may be specified.",
under refresh_option we have copy_data)

subscription_parameter - options are slot_name, synchronous_commit,
binary, and streaming. This is correct.

> Should the first three ALTER commands fail with an error about "copy_data" 
> being an invalid set_publication_option?  Should they succeed, in which case 
> the docs should mention that "refresh" is not the only valid 
> set_publication_option?

No that's not correct. As I said above, set_publication_option options
are both refresh and copy_data.

> Something else, perhaps?

Unless I misunderstood any of your concerns, I think the existing docs
and the code looks correct to me.

With Regards,
Bharath Rupireddy.
EnterpriseDB: http://www.enterprisedb.com


Reply via email to