使用;plperl";用于从带有plperl pg_可用扩展的PostgreSQL过程/函数调用RESTful Web服务

使用;plperl";用于从带有plperl pg_可用扩展的PostgreSQL过程/函数调用RESTful Web服务,postgresql,rest,web,service,plperl,Postgresql,Rest,Web,Service,Plperl,我想使用“plperl”从PostgreSQL过程/函数调用RESTful Web服务。 我不能使用plperlu、plpython2u、JOOQ或Hibernate 因此,我想使用“类似”以下网站中的“plperlu”PostgreSQL proc示例,但对于plperl(或类似于“不是”plperlu、“不是”plpython2u、“不是”JOOQ和“不是”Hibernate的plperl): 我尝试了以下代码,但它不适用于plperl,因为它可能只适用于plperlu&不适用于plper

我想使用“plperl”从PostgreSQL过程/函数调用RESTful Web服务。 我不能使用plperlu、plpython2u、JOOQ或Hibernate

因此,我想使用“类似”以下网站中的“plperlu”PostgreSQL proc示例,但对于plperl(或类似于“不是”plperlu、“不是”plpython2u、“不是”JOOQ和“不是”Hibernate的plperl):

我尝试了以下代码,但它不适用于plperl,因为它可能只适用于plperlu&不适用于plperl(但我无法让AWS在我的AWS PostgreSQL RDS上安装plperlu):

这是我得到的错误,&看起来“可能”是权限错误(但可能是plperl vs plperlu): SQL错误[42601]:错误:无法在第2行将REST/Client.pm加载到plperl中。 BEGIN失败--编译在第2行中止。 其中:编译PL/Perl函数“get”

以下是我所有可用于AWS PostgreSQL RDS的“pg_可用_扩展”列表:

CREATE OR REPLACE FUNCTION restful.get()
RETURNS text
LANGUAGE plperl
SECURITY DEFINER
AS $function$
use REST::Client;
use Encode qw(encode);
my $client = REST::Client->new(); 
$client->getUseragent()->proxy( 'https', 'https://xdmactive.maxarmdm.com:8443/semarchy/api/rest/query/test/test' ); -- # use4 proxy authentication
$client->addHeader('Content-Type', 'application/json');  --   # headers
$client->addHeader('Api-Key', '9Yw_jmh.ey3rUlkzjsdueliokT1A_kh');  # headers
$client->GET('https://xdmactive.maxarmdm.com:8443/semarchy/api/rest/query/test/test'); -- # encoding
return $client->responseContent();
$function$
address_standardizer,  
address_standardizer_data_us,  
amcheck,  
apg_plan_mgmt,  
aurora_stat_utils,  
aws_commons,  
aws_ml,  
aws_s3,  
bloom,  
btree_gin,  
btree_gist,  
citext,  
cube,  
dblink,  
dict_int,  
dict_xsyn,  
earthdistance,  
fuzzystrmatch,  
hll,  
hstore,  
hstore_plperl,  
intagg,  
intarray,  
ip4r,  
isn,  
jsonb_plperl,  
log_fdw,  
ltree,  
orafce,  
pg_buffercache,  
pg_freespacemap
pg_hint_plan
pg_prewarm
pg_repack
pg_similarity
pg_stat_statements
pg_trgm
pg_visibility
pgaudit
pgcrypto
pgrouting
pgrowlocks
pgstattuple
pgtap
plcoffee
plls
plperl
plpgsql
plprofiler
pltcl
plv8
postgis
postgis_tiger_geocoder
postgis_topology
postgres_fdw
prefix
rds_activity_stream
sslinfo
tablefunc
test_parser
tsm_system_rows
tsm_system_time
unaccent
uuid-ossp

加载模块需要从磁盘读取实现该模块的文件。受信任的pl语言无法从磁盘读取数据,这是受信任的主要原因之一

您可以在代码切换到受信任模式之前预读文件,从而有效地将模块白名单化

plperl.on_init='require REST::Client;'
但是,让RDS允许您这样做的可能性非常低,原因与他们不允许您首先使用不受信任的pl语言相同


总的来说,托管产品不允许您做您想做的事情的唯一解决方案是不使用它们。

加载模块需要从磁盘读取实现该模块的文件。受信任的pl语言无法从磁盘读取数据,这是受信任的主要原因之一

您可以在代码切换到受信任模式之前预读文件,从而有效地将模块白名单化

plperl.on_init='require REST::Client;'
但是,让RDS允许您这样做的可能性非常低,原因与他们不允许您首先使用不受信任的pl语言相同

总的来说,托管产品不允许您做您想做的事情的唯一解决方案是不使用它们