2012-01-25 21 views
1

我試圖創建表,但它沒用,因爲每個在postgres中的事務都包裝了起始塊,所以我看不到任何交易結束前更改。 唯一的解決方案是INFO,我用它來顯示當前程序步驟,但它不完全是我正在尋找的。我需要知道當前計算的詳細數據,因爲每個步驟可能需要幾個小時。 請建議我在交易結束前傳輸數據。顯示非常長的postgres過程的進度(在數據傳輸結束前傳輸數據)

UPD:我找到了傳輸進度的方法:我可以從我的程序中增加序列,並從其他連接讀取它們。 http://blog.endpoint.com/2010/04/viewing-postgres-function-progress-from.html

回答

2

您可以使用dblink擴展連接回數據庫並在不同的連接上執行語句。例如,這通常也用於在事務回退之前記錄錯誤。

快速演示:

CREATE EXTENSION dblink; -- or run the script from contrib before version 9.1 

select * from dblink('dbname=steve', $$ 
     select datname, procpid, current_query from pg_stat_activity 
     $$) r(datname name, pid int, current_query text); 

生產:

datname | pid |       current_query        
---------+------+--------------------------------------------------------------------- 
steve | 8535 | select * from dblink('dbname=steve', $$       + 
     |  |  select datname, procpid, current_query from pg_stat_activity+ 
     |  |  $$) r(datname name,           + 
     |  |   pid int, current_query text); 
steve | 9235 |                 + 
     |  |  select datname, procpid, current_query from pg_stat_activity+ 
     |  |  

,所以你可以看到,這是兩個單獨的會話。 dblink提供了打開一個持久連接的功能,這個簡單的用法可以跳過。假設您已經有一個模式來放入進度信息,那麼您可以簡單地調用dblink()來通過第二個連接填充/更新它,而第一個連接繼續執行其長事務。

+0

我已閱讀手冊,但無法弄清楚如何在我的問題中使用dblink。你不能解釋如何使用它更詳細? – n0nSmoker

+0

我已經添加了一個相當演示如何使用dblink的答案。 – araqnid

+0

Thanx!我會試試看。 – n0nSmoker