mirror of https://github.com/postgres/postgres
Add an Assert that indexam.c isn't used on an index awaiting reindexing.
This might have caught the recent embarrassment over trying to modify pg_index while its indexes were being rebuilt. Noah Misch
This commit is contained in:
parent
2d3320d3d2
commit
d2f60a3ab0
|
@ -65,6 +65,7 @@
|
|||
#include "access/relscan.h"
|
||||
#include "access/transam.h"
|
||||
#include "access/xact.h"
|
||||
#include "catalog/index.h"
|
||||
#include "pgstat.h"
|
||||
#include "storage/bufmgr.h"
|
||||
#include "storage/lmgr.h"
|
||||
|
@ -76,12 +77,21 @@
|
|||
|
||||
/* ----------------------------------------------------------------
|
||||
* macros used in index_ routines
|
||||
*
|
||||
* Note: the ReindexIsProcessingIndex() check in RELATION_CHECKS is there
|
||||
* to check that we don't try to scan or do retail insertions into an index
|
||||
* that is currently being rebuilt or pending rebuild. This helps to catch
|
||||
* things that don't work when reindexing system catalogs. The assertion
|
||||
* doesn't prevent the actual rebuild because we don't use RELATION_CHECKS
|
||||
* when calling the index AM's ambuild routine, and there is no reason for
|
||||
* ambuild to call its subsidiary routines through this file.
|
||||
* ----------------------------------------------------------------
|
||||
*/
|
||||
#define RELATION_CHECKS \
|
||||
( \
|
||||
AssertMacro(RelationIsValid(indexRelation)), \
|
||||
AssertMacro(PointerIsValid(indexRelation->rd_am)) \
|
||||
AssertMacro(PointerIsValid(indexRelation->rd_am)), \
|
||||
AssertMacro(!ReindexIsProcessingIndex(RelationGetRelid(indexRelation))) \
|
||||
)
|
||||
|
||||
#define SCAN_CHECKS \
|
||||
|
|
Loading…
Reference in New Issue