]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Avoid unexpected shutdown when sync_replication_slots is enabled.
authorFujii Masao <fujii@postgresql.org>
Mon, 4 Aug 2025 11:51:42 +0000 (20:51 +0900)
committerFujii Masao <fujii@postgresql.org>
Mon, 4 Aug 2025 11:51:42 +0000 (20:51 +0900)
Previously, enabling sync_replication_slots while wal_level was not set
to logical could cause the server to shut down. This was because
the postmaster performed a configuration check before launching
the slot synchronization worker and raised an ERROR if the settings
were incompatible. Since ERROR is treated as FATAL in the postmaster,
this resulted in the entire server shutting down unexpectedly.

This commit changes the postmaster to log that message with a LOG-level
instead of raising an ERROR, allowing the server to continue running
even with the misconfiguration.

Back-patch to v17, where slot synchronization was introduced.

Reported-by: Hugo DUBOIS <hdubois@scaleway.com>
Author: Fujii Masao <masao.fujii@gmail.com>
Reviewed-by: Hugo DUBOIS <hdubois@scaleway.com>
Reviewed-by: Shveta Malik <shveta.malik@gmail.com>
Discussion: https://postgr.es/m/CAH0PTU_pc3oHi__XESF9ZigCyzai1Mo3LsOdFyQA4aUDkm01RA@mail.gmail.com
Backpatch-through: 17

src/backend/replication/logical/slotsync.c

index 2f0c08b8fbd33322b649de3402682dbb11605b60..37738440113580dac3219a9c9fc370ae5cf33b15 100644 (file)
@@ -1059,14 +1059,14 @@ ValidateSlotSyncParams(int elevel)
 {
        /*
         * Logical slot sync/creation requires wal_level >= logical.
-        *
-        * Since altering the wal_level requires a server restart, so error out in
-        * this case regardless of elevel provided by caller.
         */
        if (wal_level < WAL_LEVEL_LOGICAL)
-               ereport(ERROR,
+       {
+               ereport(elevel,
                                errcode(ERRCODE_INVALID_PARAMETER_VALUE),
                                errmsg("replication slot synchronization requires \"wal_level\" >= \"logical\""));
+               return false;
+       }
 
        /*
         * A physical replication slot(primary_slot_name) is required on the