On Fri, 2026-04-24 at 12:30 -0700, Jeff Davis wrote:
> On Thu, 2026-04-23 at 16:41 -0700, Mark Dilger wrote:
> > On Thu, Apr 23, 2026 at 2:06 PM Jeff Davis <[email protected]>
> > wrote:
> > > (a) Is this the right fix for master?
> >
> > Yes. This approach has no problem in master that I can see.
> >
> > > (b) Is there anything we can do in the back branches, or we just
> > > leave
> > > it as fix going forward only?
> >
> > I don't see a solution.
Attached a rebased version, will commit soon. This will be a catalog
bump in beta2.
This fixes an issue introduced in a0ffa885e4, which was released in
v15. Unfortunately, we didn't find a reasonable back-patchable
solution, so I will commit only to master.
For backbranches, we could try to produce a better error message, but
that's about all we can do.
Regards,
Jeff Davis
From 10413c187eb5d9662844fb2022906c560e21ddd5 Mon Sep 17 00:00:00 2001
From: Jeff Davis <[email protected]>
Date: Wed, 22 Apr 2026 11:50:12 -0700
Subject: [PATCH v2] Nail pg_parameter_acl in relcache.
Previously, a parameter specified in the startup packet for a physical
replication connection could encounter an error trying to perform an
ACL check for the setting.
Problem was introduced in a0ffa885e4, but no reasonable back-patchable
solution was found, so fixing only in master.
Bumps catversion.
Discussion: https://postgr.es/m/d8f8e11f06d692fff89e6be0f22732d30cf695a0.camel%40j-davis.com
Reviewed-by: John Naylor <[email protected]>
Reviewed-by: Mark Dilger <[email protected]>
---
src/backend/utils/cache/catcache.c | 2 ++
src/backend/utils/cache/relcache.c | 19 ++++++++++++++-----
src/include/catalog/catversion.h | 2 +-
src/include/catalog/pg_parameter_acl.h | 2 +-
4 files changed, 18 insertions(+), 7 deletions(-)
diff --git a/src/backend/utils/cache/catcache.c b/src/backend/utils/cache/catcache.c
index a8e7bf649d2..6fb35dedf95 100644
--- a/src/backend/utils/cache/catcache.c
+++ b/src/backend/utils/cache/catcache.c
@@ -1335,6 +1335,8 @@ IndexScanOK(CatCache *cache)
case AUTHOID:
case AUTHMEMMEMROLE:
case DATABASEOID:
+ case PARAMETERACLNAME:
+ case PARAMETERACLOID:
/*
* Protect authentication lookups occurring before relcache has
diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c
index 0572ab424e7..fb4e042be8a 100644
--- a/src/backend/utils/cache/relcache.c
+++ b/src/backend/utils/cache/relcache.c
@@ -56,6 +56,7 @@
#include "catalog/pg_proc.h"
#include "catalog/pg_publication.h"
#include "catalog/pg_rewrite.h"
+#include "catalog/pg_parameter_acl.h"
#include "catalog/pg_shseclabel.h"
#include "catalog/pg_statistic_ext.h"
#include "catalog/pg_subscription.h"
@@ -120,6 +121,7 @@ static const FormData_pg_attribute Desc_pg_auth_members[Natts_pg_auth_members] =
static const FormData_pg_attribute Desc_pg_index[Natts_pg_index] = {Schema_pg_index};
static const FormData_pg_attribute Desc_pg_shseclabel[Natts_pg_shseclabel] = {Schema_pg_shseclabel};
static const FormData_pg_attribute Desc_pg_subscription[Natts_pg_subscription] = {Schema_pg_subscription};
+static const FormData_pg_attribute Desc_pg_parameter_acl[Natts_pg_parameter_acl] = {Schema_pg_parameter_acl};
/*
* Hash tables that index the relation cache
@@ -4084,8 +4086,10 @@ RelationCacheInitializePhase2(void)
Natts_pg_shseclabel, Desc_pg_shseclabel);
formrdesc("pg_subscription", SubscriptionRelation_Rowtype_Id, true,
Natts_pg_subscription, Desc_pg_subscription);
+ formrdesc("pg_parameter_acl", ParameterAclRelation_Rowtype_Id, true,
+ Natts_pg_parameter_acl, Desc_pg_parameter_acl);
-#define NUM_CRITICAL_SHARED_RELS 5 /* fix if you change list above */
+#define NUM_CRITICAL_SHARED_RELS 6 /* fix if you change list above */
}
MemoryContextSwitchTo(oldcxt);
@@ -4206,9 +4210,10 @@ RelationCacheInitializePhase3(void)
* non-shared catalogs at all. Autovacuum calls InitPostgres with a
* database OID, so it instead depends on DatabaseOidIndexId. We also
* need to nail up some indexes on pg_authid and pg_auth_members for use
- * during client authentication. SharedSecLabelObjectIndexId isn't
- * critical for the core system, but authentication hooks might be
- * interested in it.
+ * during client authentication. We need indexes on pg_parameter_acl for
+ * ACL checks on settings specified in the startup packet for a physical
+ * replication connection. SharedSecLabelObjectIndexId isn't critical for
+ * the core system, but authentication hooks might be interested in it.
*/
if (!criticalSharedRelcachesBuilt)
{
@@ -4224,8 +4229,12 @@ RelationCacheInitializePhase3(void)
AuthMemRelationId);
load_critical_index(SharedSecLabelObjectIndexId,
SharedSecLabelRelationId);
+ load_critical_index(ParameterAclParnameIndexId,
+ ParameterAclRelationId);
+ load_critical_index(ParameterAclOidIndexId,
+ ParameterAclRelationId);
-#define NUM_CRITICAL_SHARED_INDEXES 6 /* fix if you change list above */
+#define NUM_CRITICAL_SHARED_INDEXES 8 /* fix if you change list above */
criticalSharedRelcachesBuilt = true;
}
diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h
index c4e94a3a09e..081d7c0ca00 100644
--- a/src/include/catalog/catversion.h
+++ b/src/include/catalog/catversion.h
@@ -57,6 +57,6 @@
*/
/* yyyymmddN */
-#define CATALOG_VERSION_NO 202606091
+#define CATALOG_VERSION_NO 202606181
#endif
diff --git a/src/include/catalog/pg_parameter_acl.h b/src/include/catalog/pg_parameter_acl.h
index a26b05a9bf2..902e2666069 100644
--- a/src/include/catalog/pg_parameter_acl.h
+++ b/src/include/catalog/pg_parameter_acl.h
@@ -29,7 +29,7 @@
*/
BEGIN_CATALOG_STRUCT
-CATALOG(pg_parameter_acl,6243,ParameterAclRelationId) BKI_SHARED_RELATION
+CATALOG(pg_parameter_acl,6243,ParameterAclRelationId) BKI_SHARED_RELATION BKI_ROWTYPE_OID(2173,ParameterAclRelation_Rowtype_Id) BKI_SCHEMA_MACRO
{
Oid oid; /* oid */
--
2.43.0