On Fri, Apr 7, 2023 at 11:42 PM Andres Freund <and...@anarazel.de> wrote: > > On 2023-04-07 08:47:57 -0700, Andres Freund wrote: > > Integrated all of these. > > Here's my current version. Changes: > - Integrated Bertrand's changes > - polished commit messages of 0001-0003 > - edited code comments for 0003, including > InvalidateObsoleteReplicationSlots()'s header > - added a bump of SLOT_VERSION to 0001 > - moved addition of pg_log_standby_snapshot() to 0007 > - added a catversion bump for pg_log_standby_snapshot() > - moved all the bits dealing with procsignals from 0003 to 0004, now the split > makes sense IMO > - combined a few more sucessive ->safe_psql() calls >
The new approach for invalidation looks clean. BTW, I see minor inconsistency in the following two error messages (errmsg): if (MyReplicationSlot->data.invalidated == RS_INVAL_WAL) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("can no longer get changes from replication slot \"%s\"", NameStr(MyReplicationSlot->data.name)), errdetail("This slot has been invalidated because it exceeded the maximum reserved size."))); if (MyReplicationSlot->data.invalidated != RS_INVAL_NONE) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("cannot read from logical replication slot \"%s\"", NameStr(MyReplicationSlot->data.name)), errdetail("This slot has been invalidated because it was conflicting with recovery."))); Won't it be better to keep the same errmsg in the above two cases? -- With Regards, Amit Kapila.