]> granicus.if.org Git - postgresql/commitdiff
init_irels() is changed to be called in RelationCacheInitializePhase2()
authorHiroshi Inoue <inoue@tpf.co.jp>
Sat, 6 Jan 2001 01:48:59 +0000 (01:48 +0000)
committerHiroshi Inoue <inoue@tpf.co.jp>
Sat, 6 Jan 2001 01:48:59 +0000 (01:48 +0000)
so that transactional control could guarantee the consistency.

src/backend/utils/cache/relcache.c

index 843cbcff7649bc085bb83d40ea54df7d3ee8a29b..963818ffd9b764808365b83a5fe7fa0094018af8 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.123 2001/01/04 02:24:22 inoue Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.124 2001/01/06 01:48:59 inoue Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -2104,15 +2104,11 @@ RelationCacheInitialize(void)
        formrdesc(LogRelationName, Natts_pg_log, Desc_pg_log);
 
        /*
-        * If this isn't initdb time, then we want to initialize some index
-        * relation descriptors, as well.  The descriptors are for
-        * pg_attnumind (to make building relation descriptors fast) and
-        * possibly others, as they're added.
+        * init_irels() used to be called here. It is changed to be called
+        * in RelationCacheInitializePhase2() now so that transactional
+        * control could guarantee the consistency.
         */
 
-       if (!IsBootstrapProcessingMode())
-               init_irels();
-
        MemoryContextSwitchTo(oldcxt);
 }
 
@@ -2134,6 +2130,17 @@ RelationCacheInitializePhase2(void)
         */
        if (!IsBootstrapProcessingMode())
        {
+               /*
+                * Initialize critical system index relation descriptors, first.
+                * They are to make building relation descriptors fast.
+                * init_irels() used to be called in RelationCacheInitialize().
+                * It is changed to be called here to be transaction safe.
+                */
+               MemoryContext oldcxt = MemoryContextSwitchTo(CacheMemoryContext);
+               init_irels();
+               MemoryContextSwitchTo(oldcxt);
+
+               /* fix nailed-in-cache relations */
                fixrdesc(RelationRelationName);
                fixrdesc(AttributeRelationName);
                fixrdesc(ProcedureRelationName);