sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Puede la extensión de lenguaje JavaScript plv8 llamar a bibliotecas de terceros?

Se confía en el lenguaje plv8, por lo que no hay forma de cargar nada desde el sistema de archivos. Sin embargo, puede cargar módulos desde la base de datos.

Cree una tabla con el código fuente de un módulo y cárguela usando select y eval() . Un ejemplo simple para ilustrar la idea:

create table js_modules (
    name text primary key,
    source text
);

insert into js_modules values
('test', 'function test() { return "this is a test"; }' );

Cargue el módulo desde js_modules en su función:

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) 

Puede encontrar un ejemplo más elaborado con un elegante require() función en esta publicación:Una inmersión profunda en PL/v8 . . Se basa en plv8.start_proc (vea también un ejemplo corto aquí ).