PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

L'extension de langage JavaScript plv8 peut-elle appeler des bibliothèques tierces ?

Le langage plv8 est fiable, il n'y a donc aucun moyen de charger quoi que ce soit à partir du système de fichiers. Cependant, vous pouvez charger des modules à partir de la base de données.

Créez une table avec le code source d'un module et chargez-la en utilisant select et eval() . Un exemple simple pour illustrer l'idée :

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

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

Charger le module depuis js_modules dans votre fonction :

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) 

Vous pouvez trouver un exemple plus élaboré avec un élégant require() fonction dans ce post :Une plongée profonde dans PL/v8 . . Il est basé sur plv8.start_proc (voir aussi un court exemple ici ).