8
我有一個看似簡單的情況,但找不到直接的解決方案。sqlalchemy:停止長時間運行的查詢
我正在使用sqlalchemy來查詢postgres。如果發生客戶端超時,我想停止/取消來自另一個線程的長時間運行的postgres查詢。該線程可以訪問Session或Connection對象。
在這一點上我已經試過:
session.bind.raw_connection().close()
和
session.connection().close()
和
session.close
和
session.transaction.close()
但無論我嘗試什麼,postgres查詢仍會繼續,直到它結束。我從頂級看pg知道這一點。這不是很容易做到嗎?我錯過了什麼?沒有獲得pid並直接發送停止信號,這是不可能的嗎?
即使你完全殺死你的客戶端程序,數據庫可能需要很長的時間來回滾其查詢,這取決於它是和表中有多少數據。致力於優化您的查詢,而不是試圖找出如何中止它們。 – wberry 2012-02-24 20:47:50
是的,優化是最重要的,但由於我們的項目超時的性質將會發生,我們希望確保我們覆蓋所有的基地。謝謝你的評論。 – 2012-02-24 20:58:49
訪問原始套接字以關閉它的方式將被埋在psycopg2驅動程序的某處。您必須查看它的來源才能找到它。在sqlalchemy層面爲無法解釋的行爲和嚴重崩潰做好充分的準備,開始實際強制關閉其中一個套接字的瞬間。 – wberry 2012-02-24 21:02:59