In RelationNameGetRelation(), replace temp table name by
real name before doing lookup. We only want to index temp tables by their real names in the relcache, to ensure there's not more than one relcache entry for them.
This commit is contained in:
parent
15dd167854
commit
cb36c0f682
33
src/backend/utils/cache/relcache.c
vendored
33
src/backend/utils/cache/relcache.c
vendored
@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.69 1999/09/04 18:42:13 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.70 1999/09/04 21:47:23 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -56,6 +56,7 @@
|
||||
#include "utils/builtins.h"
|
||||
#include "utils/catcache.h"
|
||||
#include "utils/relcache.h"
|
||||
#include "utils/temprel.h"
|
||||
|
||||
|
||||
static void RelationFlushRelation(Relation *relationPtr,
|
||||
@ -1182,6 +1183,7 @@ RelationIdGetRelation(Oid relationId)
|
||||
Relation
|
||||
RelationNameGetRelation(char *relationName)
|
||||
{
|
||||
char *temprelname;
|
||||
Relation rd;
|
||||
RelationBuildDescInfo buildinfo;
|
||||
|
||||
@ -1192,6 +1194,15 @@ RelationNameGetRelation(char *relationName)
|
||||
IncrHeapAccessStat(local_RelationNameGetRelation);
|
||||
IncrHeapAccessStat(global_RelationNameGetRelation);
|
||||
|
||||
/* ----------------
|
||||
* if caller is looking for a temp relation, substitute its real name;
|
||||
* we only index temp rels by their real names.
|
||||
* ----------------
|
||||
*/
|
||||
temprelname = get_temp_rel_by_name(relationName);
|
||||
if (temprelname)
|
||||
relationName = temprelname;
|
||||
|
||||
/* ----------------
|
||||
* first try and get a reldesc from the cache
|
||||
* ----------------
|
||||
@ -1212,26 +1223,6 @@ RelationNameGetRelation(char *relationName)
|
||||
return rd;
|
||||
}
|
||||
|
||||
/* ----------------
|
||||
* old "getreldesc" interface.
|
||||
* ----------------
|
||||
*/
|
||||
#ifdef NOT_USED
|
||||
Relation
|
||||
getreldesc(char *relationName)
|
||||
{
|
||||
/* ----------------
|
||||
* increment access statistics
|
||||
* ----------------
|
||||
*/
|
||||
IncrHeapAccessStat(local_getreldesc);
|
||||
IncrHeapAccessStat(global_getreldesc);
|
||||
|
||||
return RelationNameGetRelation(relationName);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* ----------------------------------------------------------------
|
||||
* cache invalidation support routines
|
||||
* ----------------------------------------------------------------
|
||||
|
Loading…
x
Reference in New Issue
Block a user