Andrew Dunstan wrote:
>
> Tim Bunce just showed me the following oddity:
>
> andrew=# SET SESSION plperl.use_strict = on;
> SET
> andrew=# SHOW plperl.use_strict;
> plperl.use_strict
> -------------------
> on
> (1 row)
>
> andrew=# DO $$ elog(ERROR,"error") $$ language plperl;
> ERROR: error at line 1.
> CONTEXT: PL/Perl anonymous code block
> andrew=# SHOW plperl.use_strict;
> plperl.use_strict
> -------------------
> off
> (1 row)
>
>
> Somehow we have lost the setting, because the first use of plperl,
> which called the plperl init code, failed.
>
> It appears that whatever rolls it back forgets to put the GUC setting
> back as it was, and now it's lost, which is pretty darn ugly. And you
> can now run code which fails the 'strict' tests.
>
>
The first thing I think we need to do is move the GUC processing code
out of _PG_init() and into plperl_init_interp(), protected by a flag to
make sure it's only called successfully once. I'm trying to work out a
neat way to put the value back if there is an exception, but it's a bit
ugly.
cheers
andrew