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:
Tom Lane 2011-04-16 19:29:10 -04:00
parent 2d3320d3d2
commit d2f60a3ab0
1 changed files with 11 additions and 1 deletions

View File

@ -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 \