mirror of
https://github.com/postgres/postgres.git
synced 2025-07-07 00:36:50 +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:
@ -6,7 +6,7 @@
|
||||
* Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994-5, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/include/commands/explain.h,v 1.30 2007/03/13 00:33:43 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/include/commands/explain.h,v 1.31 2007/05/25 17:54:25 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -15,6 +15,18 @@
|
||||
|
||||
#include "executor/executor.h"
|
||||
|
||||
/* Hook for plugins to get control in ExplainOneQuery() */
|
||||
typedef void (*ExplainOneQuery_hook_type) (Query *query,
|
||||
ExplainStmt *stmt,
|
||||
const char *queryString,
|
||||
ParamListInfo params,
|
||||
TupOutputState *tstate);
|
||||
extern DLLIMPORT ExplainOneQuery_hook_type ExplainOneQuery_hook;
|
||||
|
||||
/* Hook for plugins to get control in explain_get_index_name() */
|
||||
typedef const char * (*explain_get_index_name_hook_type) (Oid indexId);
|
||||
extern DLLIMPORT explain_get_index_name_hook_type explain_get_index_name_hook;
|
||||
|
||||
|
||||
extern void ExplainQuery(ExplainStmt *stmt, const char *queryString,
|
||||
ParamListInfo params, DestReceiver *dest);
|
||||
@ -26,7 +38,7 @@ extern void ExplainOneUtility(Node *utilityStmt, ExplainStmt *stmt,
|
||||
ParamListInfo params,
|
||||
TupOutputState *tstate);
|
||||
|
||||
extern void ExplainOnePlan(QueryDesc *queryDesc, ExplainStmt *stmt,
|
||||
TupOutputState *tstate);
|
||||
extern void ExplainOnePlan(PlannedStmt *plannedstmt, ParamListInfo params,
|
||||
ExplainStmt *stmt, TupOutputState *tstate);
|
||||
|
||||
#endif /* EXPLAIN_H */
|
||||
|
Reference in New Issue
Block a user