mirror of
https://github.com/postgres/postgres.git
synced 2025-07-03 20:02:46 +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:
@ -10,7 +10,7 @@
|
||||
* Copyright (c) 2002-2007, PostgreSQL Global Development Group
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/commands/prepare.c,v 1.75 2007/04/27 22:05:47 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/commands/prepare.c,v 1.76 2007/05/25 17:54:25 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -678,8 +678,6 @@ ExplainExecuteQuery(ExecuteStmt *execstmt, ExplainStmt *stmt,
|
||||
|
||||
if (IsA(pstmt, PlannedStmt))
|
||||
{
|
||||
QueryDesc *qdesc;
|
||||
|
||||
if (execstmt->into)
|
||||
{
|
||||
if (pstmt->commandType != CMD_SELECT ||
|
||||
@ -694,22 +692,7 @@ ExplainExecuteQuery(ExecuteStmt *execstmt, ExplainStmt *stmt,
|
||||
pstmt->intoClause = execstmt->into;
|
||||
}
|
||||
|
||||
/*
|
||||
* Update snapshot command ID to ensure this query sees results of
|
||||
* any previously executed queries. (It's a bit cheesy to modify
|
||||
* ActiveSnapshot without making a copy, but for the limited ways
|
||||
* in which EXPLAIN can be invoked, I think it's OK, because the
|
||||
* active snapshot shouldn't be shared with anything else anyway.)
|
||||
*/
|
||||
ActiveSnapshot->curcid = GetCurrentCommandId();
|
||||
|
||||
/* Create a QueryDesc requesting no output */
|
||||
qdesc = CreateQueryDesc(pstmt,
|
||||
ActiveSnapshot, InvalidSnapshot,
|
||||
None_Receiver,
|
||||
paramLI, stmt->analyze);
|
||||
|
||||
ExplainOnePlan(qdesc, stmt, tstate);
|
||||
ExplainOnePlan(pstmt, paramLI, stmt, tstate);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Reference in New Issue
Block a user