Commit 1e88d824 authored by Bruce Momjian's avatar Bruce Momjian

Fix problem with table drop after rollback of transaction, no flush

of index tuples.  Thanks to Vadim for fix.
parent d3d54199
...@@ -7,12 +7,12 @@ ...@@ -7,12 +7,12 @@
* *
* *
* IDENTIFICATION * 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 * INTERFACE ROUTINES
* heap_create() - Create an uncataloged heap relation * heap_create() - Create an uncataloged heap relation
* heap_create_with_catalog() - Create a cataloged 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 * NOTES
* this code taken from access/heap/create.c, which contains * this code taken from access/heap/create.c, which contains
...@@ -1290,18 +1290,14 @@ heap_destroy_with_catalog(char *relname) ...@@ -1290,18 +1290,14 @@ heap_destroy_with_catalog(char *relname)
* ---------------- * ----------------
*/ */
if (rdesc->rd_rel->relhasindex) if (rdesc->rd_rel->relhasindex)
{
RelationRemoveIndexes(rdesc); RelationRemoveIndexes(rdesc);
}
/* ---------------- /* ----------------
* remove rules if necessary * remove rules if necessary
* ---------------- * ----------------
*/ */
if (rdesc->rd_rules != NULL) if (rdesc->rd_rules != NULL)
{
RelationRemoveRules(rid); RelationRemoveRules(rid);
}
/* triggers */ /* triggers */
if (rdesc->rd_rel->reltriggers > 0) if (rdesc->rd_rel->reltriggers > 0)
...@@ -1347,9 +1343,8 @@ heap_destroy_with_catalog(char *relname) ...@@ -1347,9 +1343,8 @@ heap_destroy_with_catalog(char *relname)
* ---------------- * ----------------
*/ */
if (!(rdesc->rd_istemp) || !(rdesc->rd_tmpunlinked)) if (!(rdesc->rd_istemp) || !(rdesc->rd_tmpunlinked))
{
smgrunlink(DEFAULT_SMGR, rdesc); smgrunlink(DEFAULT_SMGR, rdesc);
}
rdesc->rd_tmpunlinked = TRUE; rdesc->rd_tmpunlinked = TRUE;
RelationUnsetLockForWrite(rdesc); RelationUnsetLockForWrite(rdesc);
...@@ -1375,6 +1370,7 @@ heap_destroy(Relation rdesc) ...@@ -1375,6 +1370,7 @@ heap_destroy(Relation rdesc)
rdesc->rd_tmpunlinked = TRUE; rdesc->rd_tmpunlinked = TRUE;
heap_close(rdesc); heap_close(rdesc);
RemoveFromTempRelList(rdesc); RemoveFromTempRelList(rdesc);
RelationForgetRelation(rdesc->rd_id);
} }
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * 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 * INTERFACE ROUTINES
...@@ -1270,7 +1270,6 @@ index_destroy(Oid indexId) ...@@ -1270,7 +1270,6 @@ index_destroy(Oid indexId)
while (tuple = heap_getnext(scan, 0, (Buffer *) NULL), while (tuple = heap_getnext(scan, 0, (Buffer *) NULL),
HeapTupleIsValid(tuple)) HeapTupleIsValid(tuple))
{ {
heap_delete(catalogRelation, &tuple->t_ctid); heap_delete(catalogRelation, &tuple->t_ctid);
} }
heap_endscan(scan); heap_endscan(scan);
...@@ -1296,12 +1295,15 @@ index_destroy(Oid indexId) ...@@ -1296,12 +1295,15 @@ index_destroy(Oid indexId)
heap_close(catalogRelation); 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) if (FileNameUnlink(relpath(indexRelation->rd_rel->relname.data)) < 0)
elog(ERROR, "amdestroyr: unlink: %m"); elog(ERROR, "amdestroyr: unlink: %m");
index_close(indexRelation); index_close(indexRelation);
RelationForgetRelation(indexRelation->rd_id);
} }
/* ---------------------------------------------------------------- /* ----------------------------------------------------------------
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment