Hot standbys now support exporting snapshots while creating a logical replication slot

The Post Office <noreply@postgresql.org>

From: PG Doc comments form <noreply@postgresql.org>
To: pgsql-docs@lists.postgresql.org
Cc: kevinkbiju@gmail.com
Date: 2025-05-22T11:53:24Z
Lists: pgsql-docs
The following documentation comment has been logged on the website:

Page: https://www.postgresql.org/docs/17/logicaldecoding-explanation.html
Description:

Hi,
I'm referring to this bit at the very end of the page: Creation of a
snapshot is not always possible. In particular, it will fail when connected
to a hot standby. Applications that do not require snapshot export may
suppress it with the NOEXPORT_SNAPSHOT option.
It's not clear what the intention of this is (is it referring only to
physical replication slots?) but as it stands you can export snapshots while
creating a logical replication slot. This should have been possible starting
PG16, I've tested this on PG17.
postgres=# CREATE_REPLICATION_SLOT export LOGICAL pgoutput (SNAPSHOT
'export');
-[ RECORD 1 ]----+--------------------
slot_name        | export
consistent_point | 0/36C9F28
snapshot_name    | 00000072-0000000A-1
output_plugin    | pgoutput
postgres=# SELECT pg_is_in_recovery();
-[ RECORD 1 ]-----+--
pg_is_in_recovery | t
postgres=# SHOW hot_standby;
-[ RECORD 1 ]---
hot_standby | on
As an aside, I think NOEXPORT_SNAPSHOT is from the older syntax of
CREATE_REPLICATION_SLOT and should be swapped with SNAPSHOT 'nothing'.
Thanks,
Kevin

Commits

  1. doc: Fix documenation for snapshot export in logical decoding.

  2. Don't force-assign transaction id when exporting a snapshot.