mirror of
https://github.com/postgres/postgres.git
synced 2025-10-22 14:32:25 +03:00
Fix problems seen in parallel regress tests when SI buffer overruns (causing
syscache and relcache flushes). Relcache entry rebuild now preserves original tupledesc, rewrite rules, and triggers if possible, so that pointers to these things remain valid --- if these things change while relcache entry has positive refcount, we elog(ERROR) to avoid later crash. Arrange for xact-local rels to be rebuilt when an SI inval message is seen for them, so that they are updated by CommandCounterIncrement the same as regular rels. (This is useful because of Hiroshi's recent changes to process our own SI messages at CommandCounterIncrement time.) This allows simplification of some routines that previously hacked around the lack of an automatic update. catcache now keeps its own copy of tupledesc for its relation, rather than depending on the relcache's copy; this avoids needing to reinitialize catcache during a cache flush, which saves some cycles and eliminates nasty circularity problems that occur if a cache flush happens while trying to initialize a catcache. Eliminate a number of permanent memory leaks that used to happen during catcache or relcache flush; not least of which was that catcache never freed any cached tuples! (Rule parsetree storage is still leaked, however; will fix that separately.) Nothing done yet about code that uses tuples retrieved by SearchSysCache for longer than is safe.
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $Id: tupdesc.h,v 1.26 2000/01/26 05:57:51 momjian Exp $
|
||||
* $Id: tupdesc.h,v 1.27 2000/01/31 04:35:54 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -47,12 +47,11 @@ typedef struct tupleConstr
|
||||
*/
|
||||
typedef struct tupleDesc
|
||||
{
|
||||
int natts;
|
||||
/* Number of attributes in the tuple */
|
||||
int natts; /* Number of attributes in the tuple */
|
||||
Form_pg_attribute *attrs;
|
||||
/* attrs[N] is a pointer to the description of Attribute Number N+1. */
|
||||
TupleConstr *constr;
|
||||
} *TupleDesc;
|
||||
} *TupleDesc;
|
||||
|
||||
extern TupleDesc CreateTemplateTupleDesc(int natts);
|
||||
|
||||
@@ -64,6 +63,8 @@ extern TupleDesc CreateTupleDescCopyConstr(TupleDesc tupdesc);
|
||||
|
||||
extern void FreeTupleDesc(TupleDesc tupdesc);
|
||||
|
||||
extern bool equalTupleDescs(TupleDesc tupdesc1, TupleDesc tupdesc2);
|
||||
|
||||
extern bool TupleDescInitEntry(TupleDesc desc,
|
||||
AttrNumber attributeNumber,
|
||||
char *attributeName,
|
||||
|
Reference in New Issue
Block a user