1CREATE EXTENSION hstore_plperl CASCADE; 2NOTICE: installing required extension "hstore" 3NOTICE: installing required extension "plperl" 4SELECT transforms.udt_schema, transforms.udt_name, 5 routine_schema, routine_name, 6 group_name, transform_type 7FROM information_schema.transforms JOIN information_schema.routines 8 USING (specific_catalog, specific_schema, specific_name) 9ORDER BY 1, 2, 5, 6; 10 udt_schema | udt_name | routine_schema | routine_name | group_name | transform_type 11------------+----------+----------------+------------------+------------+---------------- 12 public | hstore | public | hstore_to_plperl | plperl | FROM SQL 13 public | hstore | public | plperl_to_hstore | plperl | TO SQL 14(2 rows) 15 16-- test perl -> hstore 17CREATE FUNCTION test2() RETURNS hstore 18LANGUAGE plperl 19TRANSFORM FOR TYPE hstore 20AS $$ 21$val = {a => 1, b => 'boo', c => undef}; 22return $val; 23$$; 24SELECT test2(); 25 test2 26--------------------------------- 27 "a"=>"1", "b"=>"boo", "c"=>NULL 28(1 row) 29 30-- test perl -> hstore[] 31CREATE FUNCTION test2arr() RETURNS hstore[] 32LANGUAGE plperl 33TRANSFORM FOR TYPE hstore 34AS $$ 35$val = [{a => 1, b => 'boo', c => undef}, {d => 2}]; 36return $val; 37$$; 38SELECT test2arr(); 39 test2arr 40-------------------------------------------------------------- 41 {"\"a\"=>\"1\", \"b\"=>\"boo\", \"c\"=>NULL","\"d\"=>\"2\""} 42(1 row) 43 44-- check error cases 45CREATE OR REPLACE FUNCTION test2() RETURNS hstore 46LANGUAGE plperl 47TRANSFORM FOR TYPE hstore 48AS $$ 49return 42; 50$$; 51SELECT test2(); 52ERROR: cannot transform non-hash Perl value to hstore 53CONTEXT: PL/Perl function "test2" 54CREATE OR REPLACE FUNCTION test2() RETURNS hstore 55LANGUAGE plperl 56TRANSFORM FOR TYPE hstore 57AS $$ 58return [1, 2]; 59$$; 60SELECT test2(); 61ERROR: cannot transform non-hash Perl value to hstore 62CONTEXT: PL/Perl function "test2" 63DROP FUNCTION test2(); 64DROP FUNCTION test2arr(); 65DROP EXTENSION hstore_plperl; 66DROP EXTENSION hstore; 67DROP EXTENSION plperl; 68