mirror of
https://github.com/postgres/postgres.git
synced 2025-07-07 00:36:50 +03:00
Prevent use of invalidated logical slot in CreateDecodingContext()
Previously we had checks for this in multiple places. Support for logical decoding on standbys will add other forms of invalidation, making it worth while to centralize the checks. This slightly changes the error message for both the walsender and SQL interface. Particularly the SQL interface error was inaccurate, as the "This slot has never previously reserved WAL" portion was unreachable. Reviewed-by: "Drouvot, Bertrand" <bertranddrouvot.pg@gmail.com> Reviewed-by: Melanie Plageman <melanieplageman@gmail.com> Discussion: https://postgr.es/m/20230407075009.igg7be27ha2htkbt@awork3.anarazel.de
This commit is contained in:
@ -214,19 +214,6 @@ pg_logical_slot_get_changes_guts(FunctionCallInfo fcinfo, bool confirm, bool bin
|
||||
LogicalOutputPrepareWrite,
|
||||
LogicalOutputWrite, NULL);
|
||||
|
||||
/*
|
||||
* 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 it has been invalidated.")));
|
||||
|
||||
MemoryContextSwitchTo(oldcontext);
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user