mirror of
https://github.com/postgres/postgres.git
synced 2025-06-02 00:01:40 -04:00
Fix for vacuum and cache use. Fix for BSDI 4.0.
This commit is contained in:
parent
5a61590e48
commit
beac8c1c46
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.36 1998/10/08 18:29:12 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.37 1998/10/12 00:53:30 momjian Exp $
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* INTERFACE ROUTINES
|
* INTERFACE ROUTINES
|
||||||
@ -98,8 +98,6 @@
|
|||||||
|
|
||||||
static void doinsert(Relation relation, HeapTuple tup);
|
static void doinsert(Relation relation, HeapTuple tup);
|
||||||
|
|
||||||
static bool ImmediateInvalidation;
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------
|
/* ----------------------------------------------------------------
|
||||||
* heap support routines
|
* heap support routines
|
||||||
* ----------------------------------------------------------------
|
* ----------------------------------------------------------------
|
||||||
@ -484,22 +482,6 @@ doinsert(Relation relation, HeapTuple tup)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* HeapScanIsValid is now a macro in relscan.h -cim 4/27/91
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef NOT_USED
|
|
||||||
/* ----------------
|
|
||||||
* SetHeapAccessMethodImmediateInvalidation
|
|
||||||
* ----------------
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
SetHeapAccessMethodImmediateInvalidation(bool on)
|
|
||||||
{
|
|
||||||
ImmediateInvalidation = on;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------
|
/* ----------------------------------------------------------------
|
||||||
* heap access method interface
|
* heap access method interface
|
||||||
@ -1149,9 +1131,7 @@ heap_insert(Relation relation, HeapTuple tup)
|
|||||||
* invalidate caches (only works for system relations)
|
* invalidate caches (only works for system relations)
|
||||||
* ----------------
|
* ----------------
|
||||||
*/
|
*/
|
||||||
SetRefreshWhenInvalidate(ImmediateInvalidation);
|
|
||||||
RelationInvalidateHeapTuple(relation, tup);
|
RelationInvalidateHeapTuple(relation, tup);
|
||||||
SetRefreshWhenInvalidate((bool) !ImmediateInvalidation);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return tup->t_oid;
|
return tup->t_oid;
|
||||||
@ -1253,9 +1233,7 @@ heap_delete(Relation relation, ItemPointer tid)
|
|||||||
* invalidate caches
|
* invalidate caches
|
||||||
* ----------------
|
* ----------------
|
||||||
*/
|
*/
|
||||||
SetRefreshWhenInvalidate(ImmediateInvalidation);
|
|
||||||
RelationInvalidateHeapTuple(relation, tp);
|
RelationInvalidateHeapTuple(relation, tp);
|
||||||
SetRefreshWhenInvalidate((bool) !ImmediateInvalidation);
|
|
||||||
|
|
||||||
WriteBuffer(buf);
|
WriteBuffer(buf);
|
||||||
if (IsSystemRelationName(RelationGetRelationName(relation)->data))
|
if (IsSystemRelationName(RelationGetRelationName(relation)->data))
|
||||||
@ -1407,9 +1385,7 @@ heap_replace(Relation relation, ItemPointer otid, HeapTuple replace_tuple)
|
|||||||
* invalidate caches
|
* invalidate caches
|
||||||
* ----------------
|
* ----------------
|
||||||
*/
|
*/
|
||||||
SetRefreshWhenInvalidate(ImmediateInvalidation);
|
|
||||||
RelationInvalidateHeapTuple(relation, old_tuple);
|
RelationInvalidateHeapTuple(relation, old_tuple);
|
||||||
SetRefreshWhenInvalidate((bool) !ImmediateInvalidation);
|
|
||||||
|
|
||||||
WriteBuffer(buffer);
|
WriteBuffer(buffer);
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.87 1998/10/09 21:31:34 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.88 1998/10/12 00:53:31 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -1084,6 +1084,8 @@ vc_rpfheap(VRelStats *vacrelstats, Relation onerel,
|
|||||||
newtup = (HeapTuple) palloc(tuple_len);
|
newtup = (HeapTuple) palloc(tuple_len);
|
||||||
memmove((char *) newtup, (char *) tuple, tuple_len);
|
memmove((char *) newtup, (char *) tuple, tuple_len);
|
||||||
|
|
||||||
|
RelationInvalidateHeapTuple(onerel, tuple);
|
||||||
|
|
||||||
/* store transaction information */
|
/* store transaction information */
|
||||||
TransactionIdStore(myXID, &(newtup->t_xmin));
|
TransactionIdStore(myXID, &(newtup->t_xmin));
|
||||||
newtup->t_cmin = myCID;
|
newtup->t_cmin = myCID;
|
||||||
@ -1876,12 +1878,7 @@ vc_updstats(Oid relid, int num_pages, int num_tuples, bool hasindex, VRelStats *
|
|||||||
/* XXX -- after write, should invalidate relcache in other backends */
|
/* XXX -- after write, should invalidate relcache in other backends */
|
||||||
WriteNoReleaseBuffer(ItemPointerGetBlockNumber(&rtup->t_ctid));
|
WriteNoReleaseBuffer(ItemPointerGetBlockNumber(&rtup->t_ctid));
|
||||||
|
|
||||||
/*
|
RelationInvalidateHeapTuple(rd, rtup);
|
||||||
* invalidating system relations confuses the function cache of
|
|
||||||
* pg_operator and pg_opclass, bjm
|
|
||||||
*/
|
|
||||||
if (!IsSystemRelationName(pgcform->relname.data))
|
|
||||||
RelationInvalidateHeapTuple(rd, rtup);
|
|
||||||
|
|
||||||
ReleaseBuffer(buffer);
|
ReleaseBuffer(buffer);
|
||||||
heap_close(rd);
|
heap_close(rd);
|
||||||
|
5
src/backend/utils/cache/catcache.c
vendored
5
src/backend/utils/cache/catcache.c
vendored
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/utils/cache/catcache.c,v 1.34 1998/09/01 04:32:57 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/utils/cache/catcache.c,v 1.35 1998/10/12 00:53:33 momjian Exp $
|
||||||
*
|
*
|
||||||
* Notes:
|
* Notes:
|
||||||
* XXX This needs to use exception.h to handle recovery when
|
* XXX This needs to use exception.h to handle recovery when
|
||||||
@ -1108,6 +1108,7 @@ RelationInvalidateCatalogCacheTuple(Relation relation,
|
|||||||
*/
|
*/
|
||||||
Assert(RelationIsValid(relation));
|
Assert(RelationIsValid(relation));
|
||||||
Assert(HeapTupleIsValid(tuple));
|
Assert(HeapTupleIsValid(tuple));
|
||||||
|
Assert(PointerIsValid(function));
|
||||||
CACHE1_elog(DEBUG, "RelationInvalidateCatalogCacheTuple: called");
|
CACHE1_elog(DEBUG, "RelationInvalidateCatalogCacheTuple: called");
|
||||||
|
|
||||||
/* ----------------
|
/* ----------------
|
||||||
@ -1132,9 +1133,11 @@ RelationInvalidateCatalogCacheTuple(Relation relation,
|
|||||||
if (relationId != ccp->relationId)
|
if (relationId != ccp->relationId)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
#ifdef NOT_USED
|
||||||
/* OPT inline simplification of CatalogCacheIdInvalidate */
|
/* OPT inline simplification of CatalogCacheIdInvalidate */
|
||||||
if (!PointerIsValid(function))
|
if (!PointerIsValid(function))
|
||||||
function = CatalogCacheIdInvalidate;
|
function = CatalogCacheIdInvalidate;
|
||||||
|
#endif
|
||||||
|
|
||||||
(*function) (ccp->id,
|
(*function) (ccp->id,
|
||||||
CatalogCacheComputeTupleHashIndex(ccp, relation, tuple),
|
CatalogCacheComputeTupleHashIndex(ccp, relation, tuple),
|
||||||
|
19
src/backend/utils/cache/inval.c
vendored
19
src/backend/utils/cache/inval.c
vendored
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/utils/cache/inval.c,v 1.16 1998/09/01 04:33:00 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/utils/cache/inval.c,v 1.17 1998/10/12 00:53:34 momjian Exp $
|
||||||
*
|
*
|
||||||
* Note - this code is real crufty...
|
* Note - this code is real crufty...
|
||||||
*
|
*
|
||||||
@ -74,7 +74,6 @@ typedef InvalidationMessageData *InvalidationMessage;
|
|||||||
* ----------------
|
* ----------------
|
||||||
*/
|
*/
|
||||||
static LocalInvalid Invalid = EmptyLocalInvalid; /* XXX global */
|
static LocalInvalid Invalid = EmptyLocalInvalid; /* XXX global */
|
||||||
static bool RefreshWhenInvalidate = false;
|
|
||||||
|
|
||||||
Oid MyRelationRelationId = InvalidOid;
|
Oid MyRelationRelationId = InvalidOid;
|
||||||
Oid MyAttributeRelationId = InvalidOid;
|
Oid MyAttributeRelationId = InvalidOid;
|
||||||
@ -572,20 +571,6 @@ RegisterInvalid(bool send)
|
|||||||
Invalid = EmptyLocalInvalid;
|
Invalid = EmptyLocalInvalid;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* SetRefreshWhenInvalidate --
|
|
||||||
* Causes the local caches to be immediately refreshed iff true.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
SetRefreshWhenInvalidate(bool on)
|
|
||||||
{
|
|
||||||
#ifdef INVALIDDEBUG
|
|
||||||
elog(DEBUG, "RefreshWhenInvalidate(%d) called", on);
|
|
||||||
#endif /* defined(INVALIDDEBUG) */
|
|
||||||
|
|
||||||
RefreshWhenInvalidate = on;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* RelationIdInvalidateHeapTuple --
|
* RelationIdInvalidateHeapTuple --
|
||||||
* Causes the given tuple in a relation to be invalidated.
|
* Causes the given tuple in a relation to be invalidated.
|
||||||
@ -641,9 +626,11 @@ RelationInvalidateHeapTuple(Relation relation, HeapTuple tuple)
|
|||||||
tuple,
|
tuple,
|
||||||
RelationIdRegisterLocalInvalid);
|
RelationIdRegisterLocalInvalid);
|
||||||
|
|
||||||
|
#ifdef NOT_USED
|
||||||
if (RefreshWhenInvalidate)
|
if (RefreshWhenInvalidate)
|
||||||
/* what does this do? bjm 1998/08/20 */
|
/* what does this do? bjm 1998/08/20 */
|
||||||
RelationInvalidateCatalogCacheTuple(relation,
|
RelationInvalidateCatalogCacheTuple(relation,
|
||||||
tuple,
|
tuple,
|
||||||
(void (*) ()) NULL);
|
(void (*) ()) NULL);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (c) 1994, Regents of the University of California
|
* Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $Id: inval.h,v 1.9 1998/09/01 04:39:15 momjian Exp $
|
* $Id: inval.h,v 1.10 1998/10/12 00:53:36 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -22,8 +22,6 @@ extern void DiscardInvalid(void);
|
|||||||
|
|
||||||
extern void RegisterInvalid(bool send);
|
extern void RegisterInvalid(bool send);
|
||||||
|
|
||||||
extern void SetRefreshWhenInvalidate(bool on);
|
|
||||||
|
|
||||||
extern void RelationInvalidateHeapTuple(Relation relation, HeapTuple tuple);
|
extern void RelationInvalidateHeapTuple(Relation relation, HeapTuple tuple);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1,4 +1,9 @@
|
|||||||
# for bsdi 4.0 ELF
|
# for bsdi 4.0 ELF
|
||||||
# if we defined .so in template/bsdi_4.0
|
# if we defined .so in template/bsdi_4.0
|
||||||
|
|
||||||
|
ifeq ($(DLSUFFIX), .so)
|
||||||
|
LDFLAGS+= -export-dynamic
|
||||||
|
endif
|
||||||
|
|
||||||
%.so: %.o
|
%.so: %.o
|
||||||
$(LD) -shared -o $@ $<
|
$(LD) -shared -o $@ $<
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
LDFLAGS+= -export-dynamic #-Wl,-rpath -Wl,$(LIBDIR)
|
LDFLAGS+= -export-dynamic
|
||||||
MK_NO_LORDER= true
|
MK_NO_LORDER= true
|
||||||
|
|
||||||
%.so: %.o
|
%.so: %.o
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
CFLAGS += -dy
|
CFLAGS += -dy
|
||||||
LDFLAGS += -W l,-Bexport
|
LDFLAGS += -W l,-Bexport
|
||||||
%.so: %.o
|
|
||||||
$(LD) -G -Bdynamic -o $@ $<
|
|
||||||
%.so: %.o
|
%.so: %.o
|
||||||
$(LD) -G -Bdynamic -o $@ $<
|
$(LD) -G -Bdynamic -o $@ $<
|
||||||
|
Loading…
x
Reference in New Issue
Block a user