2010-08-25 2 views
2

Iam, имеющей задачу создания PostGreSQL функции в plperlPostgreSQL не может загрузить PERL модуля

CREATE OR REPLACE FUNCTION zm_json (TEXT, TEXT) RETURNS TEXT AS $$ 
    use JSON::XS; 
    # do something 
    return $json_out; 
$$ LANGUAGE plperl; 

Когда я хочу создать функцию выше IAM получая

ERROR: creation of Perl function "zm_json" failed: Unable to load JSON/XS.pm into plperl at line 2. 
BEGIN failed--compilation aborted at line 2. 

JSON :: XS находится под /usr/lib/perl5 и Perl in my postgres показывает этот каталог в libs

CREATE OR REPLACE FUNCTION zm_perl_directories() RETURNS TEXT AS $$ 
    return join(':', @INC); 
$$ LANGUAGE plperl; 

select zm_perl_directories(); 
-[ RECORD 1 ]-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
zm_perl_directories | /etc/perl:/usr/local/lib/perl/5.10.1:/usr/local/share/perl/5.10.1:/usr/lib/perl5:/usr/share/perl5:/usr/lib/perl/5.10:/usr/share/perl/5.10:/usr/local/lib/site_perl:. 

Любые идеи почему?

+1

Dupes http://stackoverflow.com/questions/3527843/can-you-use-libraries-in-pl-perl – daxim

ответ

4

Я думаю, что plperl использует более безопасное подмножество возможностей Perl.

Как таковые, некоторые языковые встроенные ограничения ограничены. use или require является одним из них, в противном случае он допускает выполнение произвольного кода.

Если вам все равно, не стесняйтесь использовать PL/Perlu, который является неограниченным Perl.