1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-31 22:04:40 +03:00

Remove the NODROP SLOT option from DROP SUBSCRIPTION

It turned out this approach had problems, because a DROP command should
not have any options other than CASCADE and RESTRICT.  Instead, always
attempt to drop the slot if there is one configured, but also add an
ALTER SUBSCRIPTION action to set the slot to NONE.

Author: Petr Jelinek <petr.jelinek@2ndquadrant.com>
Reported-by: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://www.postgresql.org/message-id/29431.1493730652@sss.pgh.pa.us
This commit is contained in:
Peter Eisentraut
2017-05-09 10:20:42 -04:00
parent c4c493fd35
commit 013c1178fd
20 changed files with 198 additions and 128 deletions

View File

@ -133,6 +133,15 @@ CREATE SUBSCRIPTION <replaceable class="PARAMETER">subscription_name</replaceabl
Name of the replication slot to use. The default behavior is to use
<literal>subscription_name</> for slot name.
</para>
<para>
When <literal>SLOT NAME</literal> is set to
<literal>NONE</literal>, there will be no replication slot associated
with the subscription. This can be used if the replication slot will be
created later manually. Such subscriptions must also have both
<literal>ENABLED</literal> and <literal>CREATE SLOT</literal> set
to <literal>false</literal>.
</para>
</listitem>
</varlistentry>

View File

@ -21,7 +21,7 @@ PostgreSQL documentation
<refsynopsisdiv>
<synopsis>
DROP SUBSCRIPTION [ IF EXISTS ] <replaceable class="parameter">name</replaceable> [ DROP SLOT | NODROP SLOT ]
DROP SUBSCRIPTION [ IF EXISTS ] <replaceable class="parameter">name</replaceable> [ CASCADE | RESTRICT ]
</synopsis>
</refsynopsisdiv>
@ -39,7 +39,9 @@ DROP SUBSCRIPTION [ IF EXISTS ] <replaceable class="parameter">name</replaceable
<para>
<command>DROP SUBSCRIPTION</command> cannot be executed inside a
transaction block when <literal>DROP SLOT</literal> is specified.
transaction block if the subscription is associated with a replication
slot. (You can use <command>ALTER SUBSCRIPTION</command> to unset the
slot.)
</para>
</refsect1>
@ -57,20 +59,13 @@ DROP SUBSCRIPTION [ IF EXISTS ] <replaceable class="parameter">name</replaceable
</varlistentry>
<varlistentry>
<term><literal>DROP SLOT</literal></term>
<term><literal>NODROP SLOT</literal></term>
<term><literal>CASCADE</literal></term>
<term><literal>RESTRICT</literal></term>
<listitem>
<para>
Specifies whether to drop the replication slot on the publisher. The
default is
<literal>DROP SLOT</literal>.
</para>
<para>
If the publisher is not reachable when the subscription is to be
dropped, then it is useful to specify <literal>NODROP SLOT</literal>.
But the replication slot on the publisher will then have to be removed
manually.
These key words do not have any effect, since there are no dependencies
on subscriptions.
</para>
</listitem>
</varlistentry>