Take the 2-minute tour ×
Database Administrators Stack Exchange is a question and answer site for database professionals who wish to improve their database skills and learn from others in the community. It's 100% free, no registration required.

The follow code used to work in Postgresql 8.4.11 with perl v5.10.1:

=# select * From testfunction();
      testfunction      
------------------------
 http://www.google.com/

However, after doing a dump and load into Postgresql 9.1.3 with perl v5.14.2 I get:

ERROR:  PL/Perl function must return reference to hash or array
CONTEXT:  PL/Perl function "testfunction"

For reference, here is the function:

CREATE OR REPLACE FUNCTION testfunction(OUT text) AS $$
  use URI;
  return URI->new('http://www.google.com/')->canonical;
$$ LANGUAGE plperlu;

Again, the version of perl changed from v5.10.1 to v5.14.2; however, the return from Data::Peek is the same across both versions:

$ perl -MData::Peek -MURI -e'DPeek(
    URI->new(q[http://www.google.com])->canonical
);'

Output on both versions of perl:

\PVMG("http://www.google.com/"\0)
share|improve this question

1 Answer 1

up vote 3 down vote accepted

Short answer, coerce what you return to a string, should work fine in 8.4 and 9.1:

return URI->new('http://www.google.com/')->canonical().'';

See http://archives.postgresql.org/pgsql-bugs/2012-05/msg00096.php for my full response.

share|improve this answer
1  
I think even better for this applciation would be ->canonical->as_string() –  Evan Carroll May 16 '12 at 17:48
    
Welcome to dba.se Alex and thanks for contributing here too :-) –  Jack Douglas May 16 '12 at 20:14

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.