Обсуждение: Use of perl modules in plperl ?

Поиск
Список
Период
Сортировка

Use of perl modules in plperl ?

От
stan
Дата:
I am trying to examine the values of $_TD->{new}. I thought the easiest way
to see what this structure looked like was to use the Dumper functionality.
To do so I need to include the appropriate Perl module, which I would think
would be done like this:

use Data::Dumper qw(Dumper);

But inserting that into the script to create the function, like this:

CREATE OR REPLACE FUNCTION valid_id() RETURNS trigger AS $$
use Data::Dumper qw(Dumper);
    if (($_TD->{new}{i} >= 100) || ($_TD->{new}{i} <= 0)) {
    ......

Returned this error message:

ERROR:  Unable to load Data/Dumper.pm into plperl at line 2.
BEGIN failed--compilation aborted at line 2.
CONTEXT:  compilation of PL/Perl function "valid_id"

What do I have to do to use Perl modules in plperl function/

BTW this works outside plperl

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper qw(Dumper);

..................

Thanks for the help.

-- 
"They that would give up essential liberty for temporary safety deserve
neither liberty nor safety."
                        -- Benjamin Franklin



Re: Use of perl modules in plperl ?

От
stan
Дата:
On Wed, Mar 04, 2020 at 06:03:22AM -0500, stan wrote:
> I am trying to examine the values of $_TD->{new}. I thought the easiest way
> to see what this structure looked like was to use the Dumper functionality.
> To do so I need to include the appropriate Perl module, which I would think
> would be done like this:
> 
> use Data::Dumper qw(Dumper);
> 
> But inserting that into the script to create the function, like this:
> 
> CREATE OR REPLACE FUNCTION valid_id() RETURNS trigger AS $$
> use Data::Dumper qw(Dumper);
>     if (($_TD->{new}{i} >= 100) || ($_TD->{new}{i} <= 0)) {
>     ......
> 
> Returned this error message:
> 
> ERROR:  Unable to load Data/Dumper.pm into plperl at line 2.
> BEGIN failed--compilation aborted at line 2.
> CONTEXT:  compilation of PL/Perl function "valid_id"
> 
> What do I have to do to use Perl modules in plperl function/
> 
> BTW this works outside plperl
> 
> #!/usr/bin/perl
> use strict;
> use warnings;
> use Data::Dumper qw(Dumper);
> 
> ..................
> 
> Thanks for the help.
> 

Found plperlu in the docs. 

But some syntax help on referencing all the values returned by $_TD->{new}
would be helpful.
-- 
"They that would give up essential liberty for temporary safety deserve
neither liberty nor safety."
                        -- Benjamin Franklin



Re: Use of perl modules in plperl ?

От
hubert depesz lubaczewski
Дата:
On Wed, Mar 04, 2020 at 06:03:22AM -0500, stan wrote:
> I am trying to examine the values of $_TD->{new}. I thought the easiest way
> to see what this structure looked like was to use the Dumper functionality.
> To do so I need to include the appropriate Perl module, which I would think
> would be done like this:
> use Data::Dumper qw(Dumper);

plperl is trusted, and you can't use "use" in it.

More on this:
https://www.postgresql.org/docs/current/plperl-trusted.html

You have two options:
1. Switch to pl/PerlU
2. set plperl.on_init to whatever "use" you need, examples:
   https://www.postgresql.org/docs/current/plperl-under-the-hood.html#PLPERL-CONFIG

Best regards,

depesz