2014-02-07 29 views
6

当PostgreSQL触发器被触发时,我想执行外部程序(如.net c#console)。我怎样才能实现它?从PostgreSQL调用外部程序触发器

+0

为什么我的问题被否决?任何原因? –

+0

当然,我一直在寻找解决方案。我仍然无法找到更好更快的解决方案。任何替代解决方案都可以。 –

回答

8

出于安全原因,Postgres无法正常运行外部程序。

典型的解决方案是使用NOTIFY并有一个守护进程LISTEN它。有解决方案,为每一个主要的脚本语言在那里......为Java

+0

PHP示例是否阻塞?而我想不断听的呢?不只是一个事件,而是每个事件? – CMCDragonkai

+0

显然有一个未被侦听的事件队列,因此所有需要做的事情是在处理事件后再次运行侦听查询。 – CMCDragonkai

+0

链接到此C++(libpqxx)接口:[http://pqxx.org/devprojects/libpqxx/doc/4.0/html/Reference/a00208.html](http://pqxx.org/devprojects/libpqxx/ DOC/4.0/HTML /参考/ a00208.html) – villapx

3

由于Postgres 9.3有一个调用外部程序的解决方案。这是 - 出于安全原因 - 仅限于超级用户和恕我直言,用于导出数据,而不是“上触发通知”做了:

COPY (SELECT 1) TO PROGRAM '/bin/touch /tmp/created_by_postgres' 

如果要真正地将数据导出到被调用PROGRAMM,可以提供任何SELECT或表名称而不是SELECT 1。查询结果将通过其标准输入传递给调用的程序。

您可以在Postgres的文档功能的文档: http://www.postgresql.org/docs/9.3/static/sql-copy.html