sql >> Database >  >> RDS >> PostgreSQL

Kan de plv8 JavaScript-taalextensie bibliotheken van derden aanroepen?

De plv8-taal is vertrouwd, dus er is geen manier om iets van het bestandssysteem te laden. U kunt echter wel modules uit de database laden.

Maak een tabel met de broncode van een module en laad deze met select en eval() . Een eenvoudig voorbeeld om het idee te illustreren:

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

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

Laad de module van js_modules in jouw functie:

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) 

Je kunt een uitgebreider voorbeeld vinden met een elegante require() functie in dit bericht:Een diepe duik in PL/v8 . . Het is gebaseerd op plv8.start_proc (zie ook een kort voorbeeld hier ).



  1. PLS-00201 - identifier moet worden gedeclareerd

  2. krijg opeenvolgende records in mysql

  3. SQL - Vind ontbrekende int-waarden in meestal geordende opeenvolgende reeksen

  4. SQL-fout met Order By in subquery