mirror of
https://github.com/postgres/postgres.git
synced 2025-06-11 20:28:21 +03:00
Create hooks to let a loadable plugin monitor (or even replace) the planner
and/or create plans for hypothetical situations; in particular, investigate plans that would be generated using hypothetical indexes. This is a heavily-rewritten version of the hooks proposed by Gurjeet Singh for his Index Advisor project. In this formulation, the index advisor can be entirely a loadable module instead of requiring a significant part to be in the core backend, and plans can be generated for hypothetical indexes without requiring the creation and rolling-back of system catalog entries. The index advisor patch as-submitted is not compatible with these hooks, but it needs significant work anyway due to other 8.2-to-8.3 planner changes. With these hooks in the core backend, development of the advisor can proceed as a pgfoundry project.
This commit is contained in:
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/executor/nodeBitmapIndexscan.c,v 1.22 2007/01/05 22:19:28 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/executor/nodeBitmapIndexscan.c,v 1.23 2007/05/25 17:54:25 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -198,10 +198,12 @@ ExecEndBitmapIndexScan(BitmapIndexScanState *node)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* close the index relation
|
||||
* close the index relation (no-op if we didn't open it)
|
||||
*/
|
||||
index_endscan(indexScanDesc);
|
||||
index_close(indexRelationDesc, NoLock);
|
||||
if (indexScanDesc)
|
||||
index_endscan(indexScanDesc);
|
||||
if (indexRelationDesc)
|
||||
index_close(indexRelationDesc, NoLock);
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------
|
||||
@ -256,6 +258,14 @@ ExecInitBitmapIndexScan(BitmapIndexScan *node, EState *estate, int eflags)
|
||||
indexstate->ss.ss_currentRelation = NULL;
|
||||
indexstate->ss.ss_currentScanDesc = NULL;
|
||||
|
||||
/*
|
||||
* If we are just doing EXPLAIN (ie, aren't going to run the plan),
|
||||
* stop here. This allows an index-advisor plugin to EXPLAIN a plan
|
||||
* containing references to nonexistent indexes.
|
||||
*/
|
||||
if (eflags & EXEC_FLAG_EXPLAIN_ONLY)
|
||||
return indexstate;
|
||||
|
||||
/*
|
||||
* Open the index relation.
|
||||
*
|
||||
|
Reference in New Issue
Block a user