diff options
Diffstat (limited to 'src/backend/utils/init/postinit.c')
-rw-r--r-- | src/backend/utils/init/postinit.c | 19 |
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); |