从PostgreSQL中的TRIGGER返回错误消息

mar*_*mnl 2 postgresql triggers exception-handling postgresql-8.4

我想对正在插入表中的数据执行一些业务验证,我需要在执行此操作时检查另一个表中的数据.这种方式似乎是BEFORE INSERT FOR EACH ROW TRIGGER在PostgreSQL中使用它,并且从它调用的函数中我可以返回NULL,如果新数据未通过验证以防止它被插入.

有什么方法可以返回描述验证错误的错误消息吗?

mu *_*ort 6

使用raise例外:

39.8.错误和消息

使用该RAISE语句报告消息并引发错误.
[...]
EXCEPTION引发错误(通常会中止当前交易);

所以你可以在触发器中说出这样的话:

raise exception 'Say something useful about %', some_variable;
Run Code Online (Sandbox Code Playgroud)

这将中止触发器和(通常)当前事务.您引发的消息应该返回到客户端应用程序.

  • 小心,如果有异常,你不能在触发器中使用NOTIFY (2认同)