Hi,

While poking at REPACK on v19 beta4 for my Chicago meetup talk, I
noticed that the error message emitted when trying to REPACK a shared
catalog with USING INDEX is misleading, since it makes it sound like
REPACK itself is disallowed on shared catalogs, when only the USING
INDEX form is:

    postgres=# REPACK pg_authid USING INDEX pg_authid_oid_index;
    ERROR:  cannot execute REPACK on a shared catalog

    postgres=# REPACK pg_authid;
    REPACK

The restriction is intentional in repack.c, but the errmsg() text
doesn't convey that the restriction is specific to the USING INDEX form,
so for a while I thought I found a bug.

Attached patch tweaks the message to name USING INDEX specifically,
and also includes the related comment in repack.c to an errdetail() so
it's visible to the user, not just to someone reading the source:

    ERROR:  cannot execute REPACK USING INDEX on a shared catalog
    DETAIL:  Marking an index as clustered on a shared catalog would
    only take effect in the current database.

Regards,
-- 
Devrim Gündüz
Open Source Solution Architect, PostgreSQL Major Contributor
BlueSky: @devrim.gunduz.org , @gunduz.org
--- a/src/backend/commands/repack.c
+++ b/src/backend/commands/repack.c
@@ -577,8 +577,9 @@
 		ereport(ERROR,
 				errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
 		/*- translator: first %s is name of a SQL command, eg. REPACK */
-				errmsg("cannot execute %s on a shared catalog",
-					   RepackCommandAsString(cmd)));
+				errmsg("cannot execute %s USING INDEX on a shared catalog",
+					   RepackCommandAsString(cmd)),
+				errdetail("Marking an index as clustered on a shared catalog would only take effect in the current database."));
 
 	/*
 	 * The CONCURRENTLY case should have been rejected earlier because it does

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to