Re: BUG #5066: plperl issues with perl_destruct() and END blocks

Поиск
Список
Период
Сортировка
От Robert Haas
Тема Re: BUG #5066: plperl issues with perl_destruct() and END blocks
Дата
Msg-id 603c8f070909211128j2f72560cy7f40d1e4e8af503a@mail.gmail.com
обсуждение исходный текст
Ответ на Re: BUG #5066: plperl issues with perl_destruct() and END blocks  (David Fetter <david@fetter.org>)
Ответы Re: BUG #5066: plperl issues with perl_destruct() and END blocks  (David Fetter <david@fetter.org>)
Список pgsql-bugs
On Mon, Sep 21, 2009 at 2:17 PM, David Fetter <david@fetter.org> wrote:
> On Mon, Sep 21, 2009 at 01:06:17PM -0400, Alvaro Herrera wrote:
>> David Fetter escribi=F3:
>> > On Mon, Sep 21, 2009 at 12:06:30PM -0400, Alvaro Herrera wrote:
>> > > David Fetter escribi=F3:
>> > >
>> > > > Taken literally, that would mean, "the last action before the
>> > > > backend exits," but at least to me, that sounds troubling for
>> > > > the same reasons that "end of transaction" triggers do. =A0What
>> > > > happens when there are two different END blocks in a session?
>> > >
>> > > The manual is clear that both are executed.
>> >
>> > So it is, but does order matter, and if so, how would PostgreSQL
>> > know?
>>
>> The fine manual saith
>>
>> =A0 =A0 =A0 You may have multiple "END" blocks within a file--they will
>> =A0 =A0 =A0 execute in reverse order of definition; that is: last in, fi=
rst
>> =A0 =A0 =A0 out (LIFO).
>>
>> But then, why would we care? =A0We just call the destructor and Perl
>> ensures that the blocks are called in the right order.
>
> This is not quite what I meant. =A0Let's say we have two or more different
> PL/Perl functions executed over the course of a backend. =A0Which one's
> END block gets executed last? =A0Do we need to warn people about this?
> Generate a WARNING, even?

This is a feature of the Perl language.  I don't think it's our job to
second-guess the language design, however good or bad it may be.  As a
long-time Perl programmer, I would certainly say that if you are
counting on the execution ordering of your END blocks, you are
probably playing with fire and likely ought to rethink your
application design, because there are all kinds of ways this could
fail spectacularly as a result of apparently innocuous application
changes (like, say, alphabetizing the list of "use" declarations in
some package).  But that's true not only with PL/perl but with just
plain old perl, and I don't see that it's substantially more dangerous
here than anywhere else.

...Robert

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

Предыдущее
От: David Fetter
Дата:
Сообщение: Re: BUG #5066: plperl issues with perl_destruct() and END blocks
Следующее
От: David Fetter
Дата:
Сообщение: Re: BUG #5066: plperl issues with perl_destruct() and END blocks