On 10/5/07, Benjamin Krajmalnik <kraj@xxxxxxxxxxx> wrote: > > > Is there a way to execute an external program from within a stored > procedure? > In pl/pgsql it does not appear to be supported. > Will pl/perl allow me to do so? PL/PerlU ^ -- 'U' is for unsafe. PL/Perl runs in tainted mode, so it will prevent you from accessing any files (which means you can relatively safely give an access to it for ordinary users and not worry too much about them doing system("rm -rf ."); PL/PerlU is unsafe meaning that these safety checks are turned off, and you could do anything you like -- including rm -rf. :) > A little background. I have a network monitoring platform which we > developed. The collector has the capability of issuing a single query for > each test it performs. We hae a massive stored procedure which aggreates > data in real time and then stores the individual test data in the database. > This has some great pluses, in which we can graph averages of various tests, > which cannot be done with something like rrdtool. On the downside, while > relatively fast, it is not as fast in rendering a graph as rrdtool. > > The stored procedure is written in pl/pgsql. I would like, for each test, > to call rrdtool and insert a reading in the tests rrd database. This will > allow us to render certain graphs much quicker. > > Is there a way in pl/perl to call an outside program? IN this case I would > have out pl/pgsql procedure call a pl/perl p[rocedure, passing the relevant > arguments, and have it call rrdtool to insert the data point. Other approach, I think a bit better, would be to devise a scheme like this: 1) Your stored procedure works as it does now (PL/PgSQL), 2) but at the end it puts relevat information somewhere (a "queue table"?) and calls NOTIFY rrdgraph; 3) You write a simple daemon (in perl, I think), which LISTEN rrdgraph and upon receiving notification it reads info from queue table and performs graphing. See: http://www.postgresql.org/docs/8.2/static/sql-listen.html Regards, Dawid ---------------------------(end of broadcast)--------------------------- TIP 6: explain analyze is your friend