pgsql: Allow logical decoding on standbys

From: Andres Freund <andres(at)anarazel(dot)de>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Allow logical decoding on standbys
Date: 2023-04-08 09:26:51
Message-ID: E1pl4qQ-0021HA-Bw@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Allow logical decoding on standbys

Unsurprisingly, this requires wal_level = logical to be set on the primary and
standby. The infrastructure added in 26669757b6a ensures that slots are
invalidated if the primary's wal_level is lowered.

Creating a slot on a standby waits for a xl_running_xact record to be
processed. If the primary is idle (and thus not emitting xl_running_xact
records), that can take a while. To make that faster, this commit also
introduces the pg_log_standby_snapshot() function. By executing it on the
primary, completion of slot creation on the standby can be accelerated.

Note that logical decoding on a standby does not itself enforce that required
catalog rows are not removed. The user has to use physical replication slots +
hot_standby_feedback or other measures to prevent that. If catalog rows
required for a slot are removed, the slot is invalidated.

See 6af1793954e for an overall design of logical decoding on a standby.

Bumps catversion, for the addition of the pg_log_standby_snapshot() function.

Author: "Drouvot, Bertrand" <bertranddrouvot(dot)pg(at)gmail(dot)com>
Author: Andres Freund <andres(at)anarazel(dot)de> (in an older version)
Author: Amit Khandekar <amitdkhan(dot)pg(at)gmail(dot)com> (in an older version)
Reviewed-by: Andres Freund <andres(at)anarazel(dot)de>
Reviewed-by: FabrÌzio de Royes Mello <fabriziomello(at)gmail(dot)com>
Reviewed-by: Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>
Reviewed-By: Robert Haas <robertmhaas(at)gmail(dot)com>

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/0fdab27ad68a059a1663fa5ce48d76333f1bd74c

Modified Files
--------------
doc/src/sgml/func.sgml | 15 ++++++++
doc/src/sgml/logicaldecoding.sgml | 27 +++++++++++++++
src/backend/access/transam/xlog.c | 11 ++++++
src/backend/access/transam/xlogfuncs.c | 31 +++++++++++++++++
src/backend/catalog/system_functions.sql | 2 ++
src/backend/replication/logical/decode.c | 30 +++++++++++++++-
src/backend/replication/logical/logical.c | 36 ++++++++++---------
src/backend/replication/slot.c | 57 ++++++++++++++++---------------
src/backend/replication/walsender.c | 48 +++++++++++++++++---------
src/include/access/xlog.h | 1 +
src/include/catalog/catversion.h | 2 +-
src/include/catalog/pg_proc.dat | 3 ++
12 files changed, 202 insertions(+), 61 deletions(-)

Responses

Browse pgsql-committers by date

  From Date Subject
Next Message Thomas Munro 2023-04-08 10:18:13 pgsql: Update tsearch regex memory management.
Previous Message Andres Freund 2023-04-08 08:10:56 pgsql: For cascading replication, wake physical and logical walsenders