From: | Peter Eisentraut <peter(dot)eisentraut(at)2ndquadrant(dot)com> |
---|---|
To: | Petr Jelinek <petr(dot)jelinek(at)2ndquadrant(dot)com>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | Robert Haas <robertmhaas(at)gmail(dot)com>, Michael Paquier <michael(dot)paquier(at)gmail(dot)com>, PostgreSQL mailing lists <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: logical replication syntax (was DROP SUBSCRIPTION, query cancellations and slot handling) |
Date: | 2017-05-09 03:23:34 |
Message-ID: | 52a1f160-db1f-49c6-9832-498dbea58ae8@2ndquadrant.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On 5/8/17 17:55, Petr Jelinek wrote:
> On 08/05/17 22:55, Peter Eisentraut wrote:
>> On 5/5/17 13:01, Petr Jelinek wrote:
>>> What do you think of attached. I actually did add RESTRICT/CASCADE, in a
>>> way that if there is slot RESTRICT will refuse to drop subscription and
>>> CASCADE will try to drop it. Still all errors.
>>>
>>> The new way to not drop slot is to set slot_name to NONE which is new
>>> value that I invented (inspiration from OWNED BY sequences) which
>>> basically disassociates the subscription from slot.
>>>
>>> It's slightly less automatic this way but perhaps that's not a bad
>>> thing, at least nobody will drop slots by mistake while we still make
>>> sure that slots are not left over without anybody noticing.
>>
>> I think this is OK. Could you send a version of this patch based on
>> master please?
>>
>
> Here it is.
The way this uses RESTRICT and CASCADE appears to be backwards from its
usual meaning. Normally, CASCADE when dropping an object that is still
used by others will cause those other objects to be dropped. The
equivalent here would be DROP REPLICATION SLOT + CASCADE would drop the
subscription.
What we want to simulate instead is an "auto" dependency of the slot on
the subscription. So you can drop the slot separately (subject to other
restrictions), and it is dropped automatically when the subscription is
dropped. To avoid that, you can disassociate the slot from the
subscription, which you have implemented.
I think we can therefore do without RESTRICT/CASCADE here. If a slot is
associated with the subscription, it should be there when we drop the
subscription. Otherwise, the user has to disassociate the slot and take
care of it manually. So just keep the "cascade" behavior.
Similarly, I wouldn't check first whether the slot exists. If the
subscription is associated with the slot, it should be there.
--
Peter Eisentraut http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
From | Date | Subject | |
---|---|---|---|
Next Message | Peter Eisentraut | 2017-05-09 03:35:34 | Re: Should pg_current_wal_location() become pg_current_wal_lsn() |
Previous Message | Amit Langote | 2017-05-09 01:13:45 | Re: pg_dump emits ALTER TABLE ONLY partitioned_table |