The plv8 language is trusted so there is no way to load anything from the file system. However you can load modules from the database.
Create a table with source code of a module and load it using select
and eval()
. A simple example to illustrate the idea:
create table js_modules (
name text primary key,
source text
);
insert into js_modules values
('test', 'function test() { return "this is a test"; }' );
Load the module from js_modules
in your function:
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)
You can find a more elaborate example with an elegant require()
function in this post: A Deep Dive into PL/v8.. Its is based on plv8.start_proc
(see also a short example here).