2014-09-05 53 views
0

我想在PostgreSQL 9.3上執行一個長時間運行的存儲過程。我們的數據庫服務器(爲了這個問題)保證運行穩定,但調用存儲過程的機器可以在任何時候關閉(Heroku dynos每24小時循環一次)。我可以在PostgreSQL上執行存儲過程「分離」(不保持數據庫連接是否打開)嗎?

有沒有辦法在PostgreSQL上運行存儲過程'分離'?我不關心它的輸出。我可以異步運行它,然後在關閉數據庫連接時讓數據庫服務器繼續工作嗎?

我們正在使用Python和psycopg2 driver,但我並不太關心實現本身。如果可能存在,我可以弄清楚如何調用它。

我在asynchronous supportaiopg library上發現了筆記,我想知道是否有可能使用的東西。

回答

2

不,你不能運行一個函數,在你啓動它的連接終止後繼續運行。當PostgreSQL服務器發現連接已經斷開時,它將終止該功能並回滾打開的事務。

使用PostgreSQL 9.3或9.4,可以編寫一個簡單的後臺工作人員通過隊列表爲您運行程序,但這需要編譯和安裝新的C擴展到服務器的能力 - Heroku無法做到。

嘗試將您的功能重新組合爲可以單獨完成的較小工作單元。巨大的,長時間運行的功能由於其他原因是有問題的,即使不穩定的連接不成問題也應該避免。

相關問題