[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.




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);
 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);
 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


Reply via email to