Re: BUG #5066: plperl issues with perl_destruct() and END blocks - Mailing list pgsql-bugs

From Robert Haas
Subject Re: BUG #5066: plperl issues with perl_destruct() and END blocks
Date
Msg-id 603c8f070909211128j2f72560cy7f40d1e4e8af503a@mail.gmail.com
Whole thread Raw
In response to Re: BUG #5066: plperl issues with perl_destruct() and END blocks  (David Fetter <david@fetter.org>)
Responses Re: BUG #5066: plperl issues with perl_destruct() and END blocks  (David Fetter <david@fetter.org>)
List 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 by date:

Previous
From: David Fetter
Date:
Subject: Re: BUG #5066: plperl issues with perl_destruct() and END blocks
Next
From: David Fetter
Date:
Subject: Re: BUG #5066: plperl issues with perl_destruct() and END blocks