Fix bug in the WAL recovery code to finish an incomplete split.
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Wed, 11 Jun 2008 08:38:56 +0000 (08:38 +0000)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Wed, 11 Jun 2008 08:38:56 +0000 (08:38 +0000)
CacheInvalidateRelcache() crashes if called in WAL recovery, because the
invalidation infrastructure hasn't been initialized yet.

Back-patch to 8.2, where the bug was introduced.

src/backend/access/nbtree/nbtinsert.c

index e5e78797bbd06d90a7ece8540114fbd1ce595be9..01e1ea494489cb69bd1f8d0e5c3c0e884be0d541 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.166 2008/05/12 00:00:45 alvherre Exp $
+ *   $PostgreSQL: pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.167 2008/06/11 08:38:56 heikki Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -747,7 +747,8 @@ _bt_insertonpg(Relation rel,
        /* release buffers; send out relcache inval if metapage changed */
        if (BufferIsValid(metabuf))
        {
-           CacheInvalidateRelcache(rel);
+           if (!InRecovery)
+               CacheInvalidateRelcache(rel);
            _bt_relbuf(rel, metabuf);
        }
 
@@ -1792,7 +1793,8 @@ _bt_newroot(Relation rel, Buffer lbuf, Buffer rbuf)
    END_CRIT_SECTION();
 
    /* send out relcache inval for metapage change */
-   CacheInvalidateRelcache(rel);
+   if (!InRecovery)
+       CacheInvalidateRelcache(rel);
 
    /* done with metapage */
    _bt_relbuf(rel, metabuf);