mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +03:00
Extend amcheck to check heap pages.
Mark Dilger, reviewed by Peter Geoghegan, Andres Freund, Álvaro Herrera, Michael Paquier, Amul Sul, and by me. Some last-minute cosmetic revisions by me. Discussion: http://postgr.es/m/12ED3DA8-25F0-4B68-937D-D907CFBF08E7@enterprisedb.com
This commit is contained in:
@ -47,6 +47,17 @@ RelationPutHeapTuple(Relation relation,
|
||||
*/
|
||||
Assert(!token || HeapTupleHeaderIsSpeculative(tuple->t_data));
|
||||
|
||||
/*
|
||||
* Do not allow tuples with invalid combinations of hint bits to be placed
|
||||
* on a page. These combinations are detected as corruption by the
|
||||
* contrib/amcheck logic, so if you disable one or both of these
|
||||
* assertions, make corresponding changes there.
|
||||
*/
|
||||
Assert(!((tuple->t_data->t_infomask & HEAP_XMAX_LOCK_ONLY) &&
|
||||
(tuple->t_data->t_infomask2 & HEAP_KEYS_UPDATED)));
|
||||
Assert(!((tuple->t_data->t_infomask & HEAP_XMAX_COMMITTED) &&
|
||||
(tuple->t_data->t_infomask & HEAP_XMAX_IS_MULTI)));
|
||||
|
||||
/* Add the tuple to the page */
|
||||
pageHeader = BufferGetPage(buffer);
|
||||
|
||||
|
@ -735,6 +735,25 @@ ReadNextMultiXactId(void)
|
||||
return mxid;
|
||||
}
|
||||
|
||||
/*
|
||||
* ReadMultiXactIdRange
|
||||
* Get the range of IDs that may still be referenced by a relation.
|
||||
*/
|
||||
void
|
||||
ReadMultiXactIdRange(MultiXactId *oldest, MultiXactId *next)
|
||||
{
|
||||
LWLockAcquire(MultiXactGenLock, LW_SHARED);
|
||||
*oldest = MultiXactState->oldestMultiXactId;
|
||||
*next = MultiXactState->nextMXact;
|
||||
LWLockRelease(MultiXactGenLock);
|
||||
|
||||
if (*oldest < FirstMultiXactId)
|
||||
*oldest = FirstMultiXactId;
|
||||
if (*next < FirstMultiXactId)
|
||||
*next = FirstMultiXactId;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* MultiXactIdCreateFromMembers
|
||||
* Make a new MultiXactId from the specified set of members
|
||||
|
@ -109,6 +109,7 @@ extern MultiXactId MultiXactIdCreateFromMembers(int nmembers,
|
||||
MultiXactMember *members);
|
||||
|
||||
extern MultiXactId ReadNextMultiXactId(void);
|
||||
extern void ReadMultiXactIdRange(MultiXactId *oldest, MultiXactId *next);
|
||||
extern bool MultiXactIdIsRunning(MultiXactId multi, bool isLockOnly);
|
||||
extern void MultiXactIdSetOldestMember(void);
|
||||
extern int GetMultiXactIdMembers(MultiXactId multi, MultiXactMember **xids,
|
||||
|
@ -1020,6 +1020,7 @@ HbaToken
|
||||
HeadlineJsonState
|
||||
HeadlineParsedText
|
||||
HeadlineWordEntry
|
||||
HeapCheckContext
|
||||
HeapScanDesc
|
||||
HeapTuple
|
||||
HeapTupleData
|
||||
@ -2290,6 +2291,7 @@ SimpleStringList
|
||||
SimpleStringListCell
|
||||
SingleBoundSortItem
|
||||
Size
|
||||
SkipPages
|
||||
SlabBlock
|
||||
SlabChunk
|
||||
SlabContext
|
||||
@ -2791,6 +2793,8 @@ XactCallback
|
||||
XactCallbackItem
|
||||
XactEvent
|
||||
XactLockTableWaitInfo
|
||||
XidBoundsViolation
|
||||
XidCommitStatus
|
||||
XidHorizonPrefetchState
|
||||
XidStatus
|
||||
XmlExpr
|
||||
|
Reference in New Issue
Block a user