我正在處理一組PL/Python存儲過程。我使用PostgreSQL 9.3(從apt.postgresql.org安裝)和Python 2.7解釋器;在Ubuntu 13.04上運行。PL/Python錯誤「無法將SPI錯誤轉換爲Python異常」
該錯誤發生在大型操作的中間(創建物化視圖使用來自具有> 300,000行的源表的數據並使用PL/Python存儲過程計算某些字段)。
錯誤輸出,我得到的是:
ERROR: could not convert SPI error to Python exception
CONTEXT: PL/Python function "get_first_level_parent"
********** Error **********
ERROR: could not convert SPI error to Python exception
SQL state: XX000
Context: PL/Python function "get_first_level_parent"
(「get_first_level_parent」是一個存儲過程的名稱)。
PostgreSQL服務器日誌不提供任何進一步的照明(我不熟悉PostgreSQL和PL/Python內部)。當與詳細的錯誤日誌記錄運行時,我得到這個:
2013-10-18 12:56:43 EAT ERROR: XX000: could not convert SPI error to Python exception
2013-10-18 12:56:43 EAT CONTEXT: PL/Python function "get_first_level_parent"
2013-10-18 12:56:43 EAT LOCATION: PLy_spi_exception_set, plpy_spi.c:576
PostgreSQL的錯誤代碼文檔告訴我XX000
是internal_error
錯誤代碼。如果我將調用隔離到存儲過程並運行它自己的語句,例如SELECT get_first_level_parent(373673007)
,它不會引發錯誤。
我的問題是 - 我可以使用什麼工具/技術來調試這種錯誤?對於我目前的問題,我很可能通過重寫存儲過程來「解決」問題(慢慢地,一次只測試一小部分)。這是唯一的出路嗎?
鑑於錯誤發生了什麼(請參閱我自己的答案),這將是一種有效的調試技術,即使它需要設置PostgreSQL開發環境 –