aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/init/postinit.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/utils/init/postinit.c')
-rw-r--r--src/backend/utils/init/postinit.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/backend/utils/init/postinit.c b/src/backend/utils/init/postinit.c
index e0ea2e9ecfc..127f9273e85 100644
--- a/src/backend/utils/init/postinit.c
+++ b/src/backend/utils/init/postinit.c
@@ -111,7 +111,7 @@ GetDatabaseTuple(const char *dbname)
relation = heap_open(DatabaseRelationId, AccessShareLock);
scan = systable_beginscan(relation, DatabaseNameIndexId,
criticalSharedRelcachesBuilt,
- SnapshotNow,
+ NULL,
1, key);
tuple = systable_getnext(scan);
@@ -154,7 +154,7 @@ GetDatabaseTupleByOid(Oid dboid)
relation = heap_open(DatabaseRelationId, AccessShareLock);
scan = systable_beginscan(relation, DatabaseOidIndexId,
criticalSharedRelcachesBuilt,
- SnapshotNow,
+ NULL,
1, key);
tuple = systable_getnext(scan);
@@ -997,18 +997,23 @@ static void
process_settings(Oid databaseid, Oid roleid)
{
Relation relsetting;
+ Snapshot snapshot;
if (!IsUnderPostmaster)
return;
relsetting = heap_open(DbRoleSettingRelationId, AccessShareLock);
+ /* read all the settings under the same snapsot for efficiency */
+ snapshot = RegisterSnapshot(GetCatalogSnapshot(DbRoleSettingRelationId));
+
/* Later settings are ignored if set earlier. */
- ApplySetting(databaseid, roleid, relsetting, PGC_S_DATABASE_USER);
- ApplySetting(InvalidOid, roleid, relsetting, PGC_S_USER);
- ApplySetting(databaseid, InvalidOid, relsetting, PGC_S_DATABASE);
- ApplySetting(InvalidOid, InvalidOid, relsetting, PGC_S_GLOBAL);
+ ApplySetting(snapshot, databaseid, roleid, relsetting, PGC_S_DATABASE_USER);
+ ApplySetting(snapshot, InvalidOid, roleid, relsetting, PGC_S_USER);
+ ApplySetting(snapshot, databaseid, InvalidOid, relsetting, PGC_S_DATABASE);
+ ApplySetting(snapshot, InvalidOid, InvalidOid, relsetting, PGC_S_GLOBAL);
+ UnregisterSnapshot(snapshot);
heap_close(relsetting, AccessShareLock);
}
@@ -1078,7 +1083,7 @@ ThereIsAtLeastOneRole(void)
pg_authid_rel = heap_open(AuthIdRelationId, AccessShareLock);
- scan = heap_beginscan(pg_authid_rel, SnapshotNow, 0, NULL);
+ scan = heap_beginscan_catalog(pg_authid_rel, 0, NULL);
result = (heap_getnext(scan, ForwardScanDirection) != NULL);
heap_endscan(scan);