]> granicus.if.org Git - postgresql/commitdiff
Ensure to hold an exclusive lock while reindexing a relation.
authorHiroshi Inoue <inoue@tpf.co.jp>
Fri, 17 Aug 2001 23:50:00 +0000 (23:50 +0000)
committerHiroshi Inoue <inoue@tpf.co.jp>
Fri, 17 Aug 2001 23:50:00 +0000 (23:50 +0000)
This is mainly to help developers to understand the code.

src/backend/catalog/index.c

index d3f866236f72f49218678e23685e1a1a7f0e21e6..4dbc1648c19e5591be3f3af90a843c512bdf0b09 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.159 2001/08/10 18:57:33 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.160 2001/08/17 23:50:00 inoue Exp $
  *
  *
  * INTERFACE ROUTINES
@@ -2016,11 +2016,16 @@ reindex_relation(Oid relid, bool force)
        if (IsIgnoringSystemIndexes())
                upd_pg_class_inplace = true;
 
+       /*
+        *      Ensure to hold an exclusive lock throughout the
+        *      transaction. The lock could be less intensive
+        *      but now it's AccessExclusiveLock for simplicity.
+        */
+       rel = heap_open(relid, AccessExclusiveLock);
        /*
         * ignore the indexes of the target system relation while processing
         * reindex.
         */
-       rel = RelationIdGetRelation(relid);
        if (!IsIgnoringSystemIndexes() && IsSystemRelationName(NameStr(rel->rd_rel->relname)))
                deactivate_needed = true;
 #ifndef ENABLE_REINDEX_NAILED_RELATIONS
@@ -2055,7 +2060,10 @@ reindex_relation(Oid relid, bool force)
                else
                        elog(ERROR, "the target relation %u is shared", relid);
        }
-       RelationClose(rel);
+       /*
+        *      Continue to hold the lock.
+        */
+       heap_close(rel, NoLock);
 
        old = SetReindexProcessing(true);
        if (deactivate_needed)