在Postgresql中,我想调用第三方库,如moment.js或AWS lambda JS Client,以从DB中调用无服务器功能。我没有看到任何文档或示例如何执行此操作: https://github.com/plv8/plv8/blob/master/README.md
这是可能的,我在哪里可以找到如何“导入”或“需要”其他库的示例?
答案 0 :(得分:6)
plv8语言是受信任的,因此无法从文件系统加载任何内容。但是,您可以从数据库加载模块。
创建一个包含模块源代码的表,并使用select
和eval()
加载它。一个简单的例子来说明这个想法:
create table js_modules (
name text primary key,
source text
);
insert into js_modules values
('test', 'function test() { return "this is a test"; }' );
从js_modules
加载模块中的模块:
create or replace function my_function()
returns text language plv8 as $$
// load module 'test' from the table js_modules
var res = plv8.execute("select source from js_modules where name = 'test'");
eval(res[0].source);
// now the function test() is defined
return test();
$$;
select my_function();
CREATE FUNCTION
my_function
----------------
this is a test
(1 row)
您可以在这篇文章中找到一个更精细的例子,其中包含一个优雅的require()
函数:A Deep Dive into PL/v8.。它基于plv8.start_proc
(另请参阅short example here)。
答案 1 :(得分:0)
我有两个提示指向 NO 方向:
You can use PLV8
in Amazon RDS PosgreSQL。 RDS不允许任何不受信任的语言。正如PostgreSQL文档中所解释的那样:
<强>可信强>
TRUSTED
指定该语言不授予用户不具备的数据的访问权限。
如果PLV8可以使用库,那些(很可能)允许执行诸如通过HTTP下载数据或检查文件系统等操作,这会违反此限制(并且可能使RDS系统处于黑客攻击风险)。 / p>
演讲PLV8 - The PostgreSQL web side由Lucio Grenzi撰写。
幻灯片#10:
PLV8:受信任的语言
[...]
- 无法从文件系统加载外部处理模块
可能的替代方案
我使用了PLPERLu
(u
含义不受信任的)语言。使用该语言,您可以使用use
个库。您的库应该位于PostgreSQL使用的PERL安装的标准位置(如CREATE LANGUAGE
所定义)。