sql >> Databasteknik >  >> RDS >> PostgreSQL

plv8 inaktivera exekverings- och förberedelsefunktionen i eval()

Jag hittade äntligen lösningen:

create or replace function
public.js(src text, input json) returns json as $$
  //-- select js('var a = input.test; var output = []; for(k in a) { output.push(10+a[k]); };', '{"test": [1,2,3]}'::json)
  //-- select public.js('plv8.elog(NOTICE, "yoyo");', null) // should not be possible
  plv8.elog(NOTICE, 'test');
  var evalRes = null;
  (function() {
        var plv8 = null; //-- In order to disable execute, prepare...
        evalRes = eval('var output=null; ' + src + '; output;');
  })();
  plv8.elog(NOTICE, 'test2');
  return JSON.stringify(evalRes);
$$ LANGUAGE plv8;



  1. riktigt enkel SQL Inte ett GROUP BY-uttryck - Oracle

  2. PHP/SQL:Använd endast en fråga, SELECT rader från två tabeller om data finns i båda tabellerna, eller bara SELECT från en tabell om inte

  3. Konvertera från Oracles RAW(16) till .NET:s GUID

  4. Effektivt sätt att ansluta till en databas när flera funktioner kör frågor