Re: explain doesn't work with execute using
От | Tom Lane |
---|---|
Тема | Re: explain doesn't work with execute using |
Дата | |
Msg-id | 21479.1212334585@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | explain doesn't work with execute using ("Pavel Stehule" <pavel.stehule@gmail.com>) |
Ответы |
Re: explain doesn't work with execute using
|
Список | pgsql-hackers |
"Pavel Stehule" <pavel.stehule@gmail.com> writes: > I found following bug - using explain in stored procedures like: > ... > produce wrong result. Real plan is correct, etc variables are > substituted. Bud this explain show variables. This seems to be correctable with a one-line patch: make SPI_cursor_open set the CONST flag on parameters it puts into the portal (attached). I'm not entirely sure if it's a good idea or not --- comments? regards, tom lane Index: src/backend/executor/spi.c =================================================================== RCS file: /cvsroot/pgsql/src/backend/executor/spi.c,v retrieving revision 1.195 diff -c -r1.195 spi.c *** src/backend/executor/spi.c 12 May 2008 20:02:00 -0000 1.195 --- src/backend/executor/spi.c 1 Jun 2008 15:33:13 -0000 *************** *** 997,1003 **** ParamExternData *prm = ¶mLI->params[k]; prm->ptype = plan->argtypes[k]; ! prm->pflags = 0; prm->isnull = (Nulls && Nulls[k] == 'n'); if (prm->isnull) { --- 997,1010 ---- ParamExternData *prm = ¶mLI->params[k]; prm->ptype = plan->argtypes[k]; ! /* ! * We mark the parameters as const. This has no effect for simple ! * execution of a plan, but if more planning happens within the ! * portal (eg via EXPLAIN), the effect will be to treat the ! * parameters as constants. This is good and correct as long as ! * no plan generated inside the portal is used outside it. ! */ ! prm->pflags = PARAM_FLAG_CONST; prm->isnull = (Nulls && Nulls[k] == 'n'); if (prm->isnull) {
В списке pgsql-hackers по дате отправления: