Recursion and SPI - Mailing list pgsql-hackers

From Ian Lance Taylor
Subject Recursion and SPI
Date
Msg-id 20010105193916.614.qmail@daffy.airs.com
Whole thread Raw
Responses Re: Recursion and SPI
List pgsql-hackers
Does the SPI interface support recursion?  That is, can a function
use SPI to make a query which involves calling another function which
uses SPI?

The documentation suggests not, saying that if a function which uses
SPI calls another function which uses SPI, it won't work, and calling
that ``bad practice.''

However, in spi.c I note that there is a stack, and a variable
_SPI_curid, and the undocumented functions SPI_push and SPI_pop.  If
that works to support recursion, then why does the documentation
recommend against it?


Are there any restrictions on when SPI_connect may be called?  The
executor can presumably call a function at any time during the
execution of a plan if the function is used in a WHERE clause.  If
that function turns around and calls the executor via SPI, are there
any possibilities for deadlock?

Ian


pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: Well, we seem to be proof against cache-inval problems now
Next
From: "Mikheev, Vadim"
Date:
Subject: RE: Recursion and SPI