【问题标题】:Using "plperl" for Calling RESTful Web Services from PostgreSQL procedure/function with plperl pg_available_extensions使用“plperl”通过 plperl pg_available_extensions 从 PostgreSQL 过程/函数调用 RESTful Web 服务
【发布时间】:2020-10-13 21:19:39
【问题描述】:

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

所以我想使用以下网站中的“类似”“plperlu”PostgreSQL-proc 示例,但对于 plperl(或类似 plperl 的东西,它是 'not' plperlu、'not' plpython2u、'not' JOOQ和“不”休眠): Calling RESTful Web Services from PostgreSQL procedure/function

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

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 与 plperlu): SQL 错误 [42601]:错误:无法在第 2 行将 REST/Client.pm 加载到 plperl。 BEGIN failed——编译在第 2 行中止。 其中:PL/Perl 函数“get”的编译

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

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

【问题讨论】:

    标签: postgresql rest web service plperl


    【解决方案1】:

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

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

    plperl.on_init='require REST::Client;'
    

    但是让 RDS 允许您这样做的机会非常低,原因与他们一开始就不允许您使用不受信任的 pl 语言相同。

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

    【讨论】:

      猜你喜欢
      • 2018-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多