2011-06-13 101 views
1

我在postgres中創建了一個將數據插入到表中的函數。該函數接收一個字符串並在處理該值後將其輸入到表中。我想要的是能夠在pgAdmin中多次調用該函數,而不是批量運行它們。在Postgres中需要很長時間才能完成的批量/多個查詢

例: 在pgAdmin的我打開我的SQL查詢窗口,鍵入

select customfunction('string1'); 
select customfunction('string2'); 
     ^
      . 
      . 
      . 
      . 
      v 
select customfunction('string100000000'); 

當我嘗試運行此,當我運行約6000線(6000個功能),它纔會起作用。如果我在運行時取消它,它不會提交任何內容(甚至不是第一行)。我必須繼續將它們分批以完成整個查詢。如何在不批量運行的情況下實現這一目標。

我想複製並粘貼整個查詢,並等待一切完成。現在,如果我在批處理中運行超過10000行,查詢就會無限期地無響應地運行。有一種方法postgres可以提交每行一旦它運行該行?

我也想知道是否有人可以確定查詢運行時正在處理什麼行。

回答

1

您是否嘗試過配料你的字符串到文件,將文件導入到一個表(我稱之爲string_table與所謂串一列),並嘗試:

select customfunction(string) 
from string_table; 

埃塔:如果你想要一些一種進度指示器,並且需要一次運行一個選擇,您可以使用腳本語言中的DBI從文件或表中讀取字符串,循環遍歷函數調用,然後執行簡單的控制檯每次迭代打印輸出。

2

有沒有一種方法postgres可以提交每行一旦它運行該行?

如果啓用了自動提交功能 - 這也是默認設置,那麼......您是否在使用begin語句調用前面?如果在撥打您的電話前提交...

此外,請考慮準備好聲明或做什麼傑克建議。

+0

我不明白。如何在批處理調用中提交每行? – James 2011-06-19 20:09:17

+0

通過類似的循環:'begin;選擇 ...;提交;' – 2011-06-20 05:50:41

相關問題