Re: Executing external program from stored procedure

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux