I pushed this one. Some closing remarks: On 2020-Apr-28, Alvaro Herrera wrote:
> On 2020-Apr-28, Kyotaro Horiguchi wrote: > > Agreed to describe what is failed rather than the cause. However, > > logical replications slots are always "previously reserved" at > > creation. > > Bah, of course. I was thinking in making the equivalent messages all > identical in all callsites, but maybe they should be different when > slots are logical. I'll go over them again. I changed the ones that can only be logical slots so that they no longer say "previously reserved WAL". The one in pg_replication_slot_advance still uses that wording, because I didn't think it was worth creating two separate error paths. > > ERROR: replication slot "repl" is not usable to get changes > > That wording seems okay, but my specific point for this error message is > that we were trying to use a physical slot to get logical changes; so > the fact that the slot has been invalidated is secondary and we should > complain about the *type* of slot rather than the restart_lsn. I moved the check for validity to after CreateDecodingContext, so the other errors are reported preferently. I also chose a different wording: /* * After the sanity checks in CreateDecodingContext, make sure the * restart_lsn is valid. Avoid "cannot get changes" wording in this * errmsg because that'd be confusingly ambiguous about no changes * being available. */ if (XLogRecPtrIsInvalid(MyReplicationSlot->data.restart_lsn)) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("can no longer get changes from replication slot \"%s\"", NameStr(*name)), errdetail("This slot has never previously reserved WAL, or has been invalidated."))); I hope this is sufficiently clear, but if not, feel free to nudge me and we can discuss it further. -- Álvaro Herrera https://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services