我正在研究一组 PL/Python 存储过程。我正在使用 PostgreSQL 9.3(从 apt.postgresql.org 安装)和 Python 2.7 解释器;在 Ubuntu 13.04 上运行。
该错误发生在大型操作的中间(创建一个物化视图,该视图使用来自具有 > 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)
,它不会引发错误。
我的问题是 - 我可以使用哪些工具/技术来调试此类错误?对于我当前的问题,我很可能通过重写存储过程来“解决”问题(慢慢地,一次测试一小部分)。这是唯一的出路吗?