postgres.git / summary / log / commit / refs
commit 43649b6a53e9b3964e921cc962f5c977bce688fd
Author: Álvaro Herrera <alvherre@kurilemu.de>
Date: Thu May 28 13:04:36 2026 +0000
Improve REPACK (CONCURRENTLY) error when wal_level < replica
The error emitted when REPACK (CONCURRENTLY) is run with too low a
wal_level is thrown by CheckSlotRequirements(), which is a bit
mysterious when the user doesn't know what's up. Add an upfront check
in check_concurrent_repack_requirements() for a more explicit, REPACK-
centered report, which is easier to understand -- this also saves
starting the worker just to have it die immediately.
Author: Baji Shaik <baji.pgdev@gmail.com>
Reviewed-by: Chao Li <li.evan.chao@gmail.com>
Discussion: https://postgr.es/m/CA+fm-ROdgh0rEVuXoViBk4TVgjodrN=MTR_RYuOuKLZ9voX4YA@mail.gmail.com
src/backend/commands/repack.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/src/backend/commands/repack.c b/src/backend/commands/repack.c
index da9d941f4a1..c5d85eced48 100644
--- a/src/backend/commands/repack.c
+++ b/src/backend/commands/repack.c
@@ -40,6 +40,7 @@
#include "access/toast_internals.h"
#include "access/transam.h"
#include "access/xact.h"
+#include "access/xlog.h"
#include "catalog/catalog.h"
#include "catalog/dependency.h"
#include "catalog/heap.h"
@@ -897,6 +898,14 @@ check_concurrent_repack_requirements(Relation rel, Oid *ident_idx_p)
replident;
Oid ident_idx;
+ if (wal_level < WAL_LEVEL_REPLICA)
+ ereport(ERROR,
+ errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+ errmsg("cannot execute \"%s\" in this configuration",
+ "REPACK (CONCURRENTLY)"),
+ errdetail("%s requires \"wal_level\" to be set to \"replica\" or higher.",
+ "REPACK (CONCURRENTLY)"));
+
/* Data changes in system relations are not logically decoded. */
if (IsCatalogRelation(rel))
ereport(ERROR,