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 <johncnaylorls@gmail.com>
Reviewed-by: Mark Dilger <mark.dilger@enterprisedb.com>
This commit is contained in:
Jeff Davis 2026-06-23 12:06:33 -07:00
parent 2af70e9374
commit 4cc02b8077
4 changed files with 18 additions and 7 deletions

View file

@ -1335,6 +1335,8 @@ IndexScanOK(CatCache *cache)
case AUTHOID:
case AUTHMEMMEMROLE:
case DATABASEOID:
case PARAMETERACLNAME:
case PARAMETERACLOID:
/*
* Protect authentication lookups occurring before relcache has

View file

@ -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;
}

View file

@ -57,6 +57,6 @@
*/
/* yyyymmddN */
#define CATALOG_VERSION_NO 202606231
#define CATALOG_VERSION_NO 202606232
#endif

View file

@ -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 */