Use of perl modules in plperl ?

Started by stanabout 6 years ago3 messagesgeneral
Jump to latest
#1stan
stanb@panix.com

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

#2stan
stanb@panix.com
In reply to: stan (#1)
Re: Use of perl modules in plperl ?

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

In reply to: stan (#1)
Re: Use of perl modules in plperl ?

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