Re: Recursive stored procedure in C.

Поиск
Список
Период
Сортировка
От Leif Jensen
Тема Re: Recursive stored procedure in C.
Дата
Msg-id Pine.LNX.4.58.0507141548360.12549@samba.crysberg.dk
обсуждение исходный текст
Ответ на Re: Recursive stored procedure in C.  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: Recursive stored procedure in C.  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-general
   Hi Tom,

  Thank you for the suggestions. I didn't know anything about SPI_push and
SPI_pop and I will walk through my code and stuff them in. Am I looking at
some wrong documentation ? I never saw anything about those ?

  Do you know any good examples doing such things ?

 Leif


On Thu, 14 Jul 2005, Tom Lane wrote:

> Leif Jensen <leif@crysberg.dk> writes:
> >    I am trying to make a stored procedure in C that is used as a trigger
> > on before/after insert/update on a certain table. This procedure might do
> > inserts/updates on the same table (recursively triggering itself). I have
> > made (pretty) sure that I'm not using 'global' variables in this module
> > and that I do an SPI_connect() the very first time I enter and an
> > SPI_finish() at the last exit.
>
> If you want the trigger levels to be independent (which I think you do)

   Yes.

> then you need a SPI_connect and a SPI_finish in *each* trigger call.
> Whatever magic you are doing to special-case recursion is all wrong and
> should be ripped out, root and branch.

   Ok, will do.

>
> The bit you may be missing is that you need to do SPI_push and SPI_pop
> around anything that might possibly call another function using SPI (eg,
> your own recursive instance, but also anything else that might use SPI).
> SPI_execute() and friends do this for you, but if the recursion is not

   SPI_exec() ?

> via a SPI-executed query then you need to do it explicitly.
>
>             regards, tom lane
>

В списке pgsql-general по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: Recursive stored procedure in C.
Следующее
От: Tom Lane
Дата:
Сообщение: Re: Recursive stored procedure in C.