mirror of
https://github.com/postgres/postgres.git
synced 2025-11-13 16:22:44 +03:00
Fixes: Errors when PQexec() in backend creates temp
relations and transaction is aborted Submitted by: wieck@sapserv.debis.de (Jan Wieck)
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.1.1.1 1996/07/09 06:21:15 scrappy Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.2 1996/10/24 07:54:45 scrappy Exp $
|
||||
*
|
||||
* INTERFACE ROUTINES
|
||||
* heap_creatr() - Create an uncataloged heap relation
|
||||
@@ -315,6 +315,13 @@ heap_creatr(char *name,
|
||||
rdesc->rd_rel->reltype = relid;
|
||||
}
|
||||
|
||||
/* ----------------
|
||||
* remember if this is a temp relation
|
||||
* ----------------
|
||||
*/
|
||||
|
||||
rdesc->rd_istemp = isTemp;
|
||||
|
||||
/* ----------------
|
||||
* have the storage manager create the relation.
|
||||
* ----------------
|
||||
@@ -1306,6 +1313,9 @@ heap_destroy(char *relname)
|
||||
* ----------------
|
||||
*/
|
||||
(void) smgrunlink(rdesc->rd_rel->relsmgr, rdesc);
|
||||
if(rdesc->rd_istemp) {
|
||||
rdesc->rd_tmpunlinked = TRUE;
|
||||
}
|
||||
heap_close(rdesc);
|
||||
}
|
||||
|
||||
@@ -1320,6 +1330,9 @@ heap_destroyr(Relation rdesc)
|
||||
{
|
||||
ReleaseTmpRelBuffers(rdesc);
|
||||
(void) smgrunlink(rdesc->rd_rel->relsmgr, rdesc);
|
||||
if(rdesc->rd_istemp) {
|
||||
rdesc->rd_tmpunlinked = TRUE;
|
||||
}
|
||||
heap_close(rdesc);
|
||||
RemoveFromTempRelList(rdesc);
|
||||
}
|
||||
@@ -1357,7 +1370,7 @@ InitTempRelList()
|
||||
tempRels = (TempRelList*)malloc(sizeof(TempRelList));
|
||||
tempRels->size = TEMP_REL_LIST_SIZE;
|
||||
tempRels->rels = (Relation*)malloc(sizeof(Relation) * tempRels->size);
|
||||
memset(tempRels->rels, sizeof(Relation) * tempRels->size , 0);
|
||||
memset(tempRels->rels, 0, sizeof(Relation) * tempRels->size);
|
||||
tempRels->num = 0;
|
||||
}
|
||||
|
||||
@@ -1418,7 +1431,7 @@ DestroyTempRels()
|
||||
for (i=0;i<tempRels->num;i++) {
|
||||
rdesc = tempRels->rels[i];
|
||||
/* rdesc may be NULL if it has been removed from the list already */
|
||||
if (rdesc)
|
||||
if (rdesc)
|
||||
heap_destroyr(rdesc);
|
||||
}
|
||||
free(tempRels->rels);
|
||||
|
||||
Reference in New Issue
Block a user