使用 plpy.error 或自定义 SPIError 传递自定义错误代码 (ERRCODE)
Pass custom error code (ERRCODE) with a plpy.error or a custom SPIError
是否可以通过 plpy.error/fatal
传递自定义错误代码或继承 SPIError
传递自定义错误代码、提示等?
我找到了解决方法。使用 SPIError
class 的实例,并设置 spidata
属性.
postgres=# do $$
x = plpy.SPIError('Nazdarek');
x.spidata = (0, "Some detail", "some hint", None, -1);
raise x;
$$ language plpythonu;
ERROR: plpy.SPIError: Nazdarek
DETAIL: Some detail
HINT: some hint
CONTEXT: Traceback (most recent call last):
PL/Python anonymous code block, line 4, in <module>
raise x;
PL/Python anonymous code block
Errcode 应该输入整数值,这很不友好。我看看怎么翻译比较好
在浏览 plpython 源代码时,我目前发现的一种方法是继承 SPIError 并设置 sqlstate
raise type('MyError', (plpy.SPIError,), {'sqlstate': 'D000M'})(...)
将传播 ERRCODE D000M
并为我工作。
最好也定义一个自定义 HINT,但看起来更棘手,因为它带有 spidata
。
是否可以通过 plpy.error/fatal
传递自定义错误代码或继承 SPIError
传递自定义错误代码、提示等?
我找到了解决方法。使用 SPIError
class 的实例,并设置 spidata
属性.
postgres=# do $$
x = plpy.SPIError('Nazdarek');
x.spidata = (0, "Some detail", "some hint", None, -1);
raise x;
$$ language plpythonu;
ERROR: plpy.SPIError: Nazdarek
DETAIL: Some detail
HINT: some hint
CONTEXT: Traceback (most recent call last):
PL/Python anonymous code block, line 4, in <module>
raise x;
PL/Python anonymous code block
Errcode 应该输入整数值,这很不友好。我看看怎么翻译比较好
在浏览 plpython 源代码时,我目前发现的一种方法是继承 SPIError 并设置 sqlstate
raise type('MyError', (plpy.SPIError,), {'sqlstate': 'D000M'})(...)
将传播 ERRCODE D000M
并为我工作。
最好也定义一个自定义 HINT,但看起来更棘手,因为它带有 spidata
。