Re: replication_slots usability issue

Andres Freund <andres@anarazel.de>

From: Andres Freund <andres@anarazel.de>
To: "Joshua D. Drake" <jd@commandprompt.com>
Cc: Michael Paquier <michael@paquier.xyz>, Alvaro Herrera <alvherre@2ndquadrant.com>, pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2018-10-30T18:08:55Z
Lists: pgsql-hackers
On 2018-10-30 11:02:04 -0700, Joshua D. Drake wrote:
> On 10/30/18 10:52 AM, Andres Freund wrote:
> > On 2018-10-30 11:51:09 +0900, Michael Paquier wrote:
> > > On Mon, Oct 29, 2018 at 12:13:04PM -0700, Andres Freund wrote:
> > > > I don't think this quite is the problem. ISTM the issue is rather that
> > > > StartupReplicationSlots() *needs* to check whether wal_level > minimal,
> > > > and doesn't. So you can create a slot, shutdown, change wal_level,
> > > > startup. A slot exists but won't work correctly.
> > > It seems to me that what we are looking for is just to complain at
> > > startup if we find any slot data and if trying to start up with
> > > wal_level = minimal.
> > Right, we really should just call CheckSlotRequirements() before doing
> > so. I'll make it so, once I'm actually awake and had some coffee.
>
> Why not just disable the slot and report an INFO: line?

Because afterwards there'd be a slot with corrupted contents. Especially
bad for logical slots. Which might look ok, but crash in weird ways.

- Andres


Commits

  1. Fix copy-paste error in errhint() introduced in 691d79a07933.

  2. Lower error level from PANIC to FATAL when restoring slots at startup

  3. Fix error message typo introduced 691d79a07933.

  4. Disallow starting server with insufficient wal_level for existing slot.

  5. Allow replication slots to be dropped in single-user mode