2014-02-07 34 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