init_irels() is changed to be called in RelationCacheInitializePhase2()
authorHiroshi Inoue
Sat, 6 Jan 2001 01:48:59 +0000 (01:48 +0000)
committerHiroshi Inoue
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);