首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用" plperl“从带有plperl pg_available_extensions的PostgreSQL过程/函数调用RESTful Web服务

使用" plperl“从带有plperl pg_available_extensions的PostgreSQL过程/函数调用RESTful Web服务
EN

Stack Overflow用户
提问于 2020-10-14 05:19:39
回答 1查看 331关注 0票数 1

我想使用"plperl“从PostgreSQL过程/函数调用一个RESTful网络服务。我不能使用plperlu,plpython2u,JOOQ或者Hibernate。

所以我想使用下面网站中的"plperlu“PostgreSQL-proc示例,但是对于plperl (或者像plperl这样的东西,它不是plperlu,不是plpython2u,不是JOOQ,不是Hibernate):Calling RESTful Web Services from PostgreSQL procedure/function

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

代码语言:javascript
复制
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$

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

以下是我可以在我的AWS-PostgreSQL-RDS中使用的所有"pg_available_extensions“的列表:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2020-10-14 10:28:47

加载模块需要从磁盘读取实现该模块的文件。可信的pl语言不能从磁盘读取数据,这是它们被信任的主要原因之一。

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

代码语言:javascript
复制
plperl.on_init='require REST::Client;'

但是让RDS允许你这样做的机会是相当低的,因为他们一开始就不允许你使用不可信的pl语言。

总而言之,托管产品不让你做你想做的事情的唯一解决方案就是不使用它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64343306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档