]> granicus.if.org Git - postgresql/commitdiff
Fix problem with table drop after rollback of transaction, no flush
authorBruce Momjian <bruce@momjian.us>
Sat, 13 Jun 1998 20:22:54 +0000 (20:22 +0000)
committerBruce Momjian <bruce@momjian.us>
Sat, 13 Jun 1998 20:22:54 +0000 (20:22 +0000)
of index tuples.  Thanks to Vadim for fix.

src/backend/catalog/heap.c
src/backend/catalog/index.c

index c9bfa2e437ad6ac58219b47ef405a4280aa322e0..acc9a8a7353a90e900cabe25ee4e0512931db071 100644 (file)
@@ -7,12 +7,12 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.48 1998/04/27 04:04:47 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.49 1998/06/13 20:22:53 momjian Exp $
  *
  * INTERFACE ROUTINES
  *             heap_create()                   - Create an uncataloged heap relation
  *             heap_create_with_catalog() - Create a cataloged relation
- *             heap_destroy_with_catalog()                     - Removes named relation from catalogs
+ *             heap_destroy_with_catalog()     - Removes named relation from catalogs
  *
  * NOTES
  *       this code taken from access/heap/create.c, which contains
@@ -1290,18 +1290,14 @@ heap_destroy_with_catalog(char *relname)
         * ----------------
         */
        if (rdesc->rd_rel->relhasindex)
-       {
                RelationRemoveIndexes(rdesc);
-       }
 
        /* ----------------
         *      remove rules if necessary
         * ----------------
         */
        if (rdesc->rd_rules != NULL)
-       {
                RelationRemoveRules(rid);
-       }
 
        /* triggers */
        if (rdesc->rd_rel->reltriggers > 0)
@@ -1347,9 +1343,8 @@ heap_destroy_with_catalog(char *relname)
         * ----------------
         */
        if (!(rdesc->rd_istemp) || !(rdesc->rd_tmpunlinked))
-       {
                smgrunlink(DEFAULT_SMGR, rdesc);
-       }
+
        rdesc->rd_tmpunlinked = TRUE;
 
        RelationUnsetLockForWrite(rdesc);
@@ -1375,6 +1370,7 @@ heap_destroy(Relation rdesc)
        rdesc->rd_tmpunlinked = TRUE;
        heap_close(rdesc);
        RemoveFromTempRelList(rdesc);
+       RelationForgetRelation(rdesc->rd_id);
 }
 
 
index aca9fdf6ec2c33f1f09476a27bf7290ebdd183ba..69a71858c16bb4e92755fa30d65b3b1cde4fad43 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.41 1998/05/09 23:42:59 thomas Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.42 1998/06/13 20:22:54 momjian Exp $
  *
  *
  * INTERFACE ROUTINES
@@ -1270,7 +1270,6 @@ index_destroy(Oid indexId)
        while (tuple = heap_getnext(scan, 0, (Buffer *) NULL),
                   HeapTupleIsValid(tuple))
        {
-
                heap_delete(catalogRelation, &tuple->t_ctid);
        }
        heap_endscan(scan);
@@ -1296,12 +1295,15 @@ index_destroy(Oid indexId)
        heap_close(catalogRelation);
 
        /*
-        * physically remove the file
+        * flush cache and physically remove the file
         */
+       ReleaseRelationBuffers(indexRelation);
+
        if (FileNameUnlink(relpath(indexRelation->rd_rel->relname.data)) < 0)
                elog(ERROR, "amdestroyr: unlink: %m");
 
        index_close(indexRelation);
+       RelationForgetRelation(indexRelation->rd_id);
 }
 
 /* ----------------------------------------------------------------