Re: SPI_ERROR_CONNECT within pl/pgsql, PG 8.4 - Mailing list pgsql-bugs

From Tom Lane
Subject Re: SPI_ERROR_CONNECT within pl/pgsql, PG 8.4
Date
Msg-id 20196.1247584515@sss.pgh.pa.us
Whole thread Raw
In response to Re: SPI_ERROR_CONNECT within pl/pgsql, PG 8.4  (Frank van Vugt <ftm.van.vugt@foxi.nl>)
Responses Re: SPI_ERROR_CONNECT within pl/pgsql, PG 8.4
Re: SPI_ERROR_CONNECT within pl/pgsql, PG 8.4
List pgsql-bugs
I think the attached patch will fix it for you.

            regards, tom lane

Index: src/backend/utils/cache/plancache.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/utils/cache/plancache.c,v
retrieving revision 1.27
diff -c -r1.27 plancache.c
*** src/backend/utils/cache/plancache.c    11 Jun 2009 14:49:05 -0000    1.27
--- src/backend/utils/cache/plancache.c    14 Jul 2009 15:04:38 -0000
***************
*** 45,50 ****
--- 45,51 ----
  #include "access/transam.h"
  #include "catalog/namespace.h"
  #include "executor/executor.h"
+ #include "executor/spi.h"
  #include "nodes/nodeFuncs.h"
  #include "optimizer/planmain.h"
  #include "storage/lmgr.h"
***************
*** 502,509 ****
--- 503,521 ----
          {
              /*
               * Generate plans for queries.
+              *
+              * The planner may try to call SPI-using functions, which causes
+              * a problem if we're already inside one.  Rather than expect
+              * all SPI-using code to do SPI_push whenever a replan could
+              * happen, it seems best to take care of the case here.
               */
+             bool    pushed;
+
+             pushed = SPI_push_conditional();
+
              slist = pg_plan_queries(slist, plansource->cursor_options, NULL);
+
+             SPI_pop_conditional(pushed);
          }

          /*

pgsql-bugs by date:

Previous
From: Heikki Linnakangas
Date:
Subject: Re: BUG #4919: CREATE USER command slows down system performance
Next
From: Frank van Vugt
Date:
Subject: Re: SPI_ERROR_CONNECT within pl/pgsql, PG 8.4