[moving to -hackers]
I wrote:
I have made some progress with what I think is needed to have two
interpreters for plperl. This is a lot harder than the pltcl case for
two reasons: 1. there are no restrictions on having 2 tcl
interpreters, and 2. tcl does not need to save and restore context as
we have to do with perl. I think I have a conceptual siolution to
these two problems, but what I have is currently segfaulting somewhat
myteriously. Tracing a dynamically loaded library in a postgres
backend with a debugger is less than fun, too. I am attaching what I
currently have, liberally sprinkled with elog(NOTICE) calls as trace
writes.
With a little more perseverance I found the problem. The attached
patch passes regression. But it now needs plenty of eyeballs and testing.
Well, if anyone cast eyeballs over it they kept it secret from me :-(
However, I have now tested the patch with the little script shown below
and it seems to do the Right Thing (tm) in switching context and
restoring it. So I think it can be applied to HEAD, along with an
addition to the docs and a release note.
Since this is a behaviour modification, do we want to apply it to the
back branches? Doing so would certainly be possible, although it would
be non-trivial.
cheers
andrew
------------
drop function if exists f1(int);
drop function if exists f2(int);
create function f1(int) returns void language plperl as
$$
my $arg = shift;
elog NOTICE,"in plperl func f1($arg)";
return if ($arg > 5);
$arg++;
spi_exec_query("select f2($arg)");
$$;
create function f2(int) returns void language plperlu as
$$
my $arg = shift;
elog NOTICE,"in plperlu func f2($arg)";
return if ($arg > 5);
$arg++;
spi_exec_query("select f1($arg)");
$$;
select f1(0);
select f2(0);
---------------------------(end of broadcast)---------------------------
TIP 7: You can help support the PostgreSQL project by donating at
http://www.postgresql.org/about/donate