2015-09-26 65 views

回答

2

虽然戳通过plpython源,一种方法,我发现至今,是从SPIError继承并设置sqlstate

raise type('MyError', (plpy.SPIError,), {'sqlstate': 'D000M'})(...) 

将传播ERRCODE D000M和对我的作品。

很高兴能定义一个自定义提示,但看起来更棘手,因为它带有spidata

+0

看到这个解决方法很奇怪,虽然这个缺少的功能的修复可以是四个小时的工作:(。PostgreSQL是开源的,如果有人错过了某些功能,他应该发送一个提议这个功能。所有功能用于实现用户友好的plpy.error功能,支持DETAIL,HINT,SQLCODE。 –

1

我发现一个解决方案如何做到这一点。使用SPIError类的实例,并设置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 

错误代码应该输入为整数值,什么是非常不友好的。我会看看如何更好地翻译它。

相关问题