Re: Executing external program from stored procedure - Mailing list pgsql-admin

From Dawid Kuroczko
Subject Re: Executing external program from stored procedure
Date
Msg-id 758d5e7f0710050151v23e30a58yb89d8e1e4e533153@mail.gmail.com
Whole thread Raw
In response to Executing external program from stored procedure  ("Benjamin Krajmalnik" <kraj@illumen.com>)
Responses Re: Executing external program from stored procedure  ("Greg Sabino Mullane" <greg@turnstep.com>)
List pgsql-admin
On 10/5/07, Benjamin Krajmalnik <kraj@illumen.com> 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

pgsql-admin by date:

Previous
From: "Benjamin Krajmalnik"
Date:
Subject: Executing external program from stored procedure
Next
From: "Dawid Kuroczko"
Date:
Subject: Re: Postgres Array Traversing Problem