可以看到ereport这个语句主要分三部分,error就是我们的严重级别,errcode就是一些错误代码, 最后是errmsg。
严重级别根据PG里边的一些规范,我们这里规定是用DEBUG5到DEBUG1,包括我们的NOTICED、WARNING、ER ROR、FATAL、PANIC,随着级别越来越高,对于客户的信息产生了不同的重要程度,也可以通过我们的配置文件设置 给客户输出什么级别的信息。
如果是error或者更高,需要注意的是如果严重级别没有设置,或者说严重级别设置了error或者更高ereport,会终止用户 定义函数的执行,并且不会返回到调用者。如果是严重级别低于error,那ereport会正常返回。
errcode指定对于该情况的一些错误标识代码,这里的错误代码一般由5个字符组成,这5个字符包含了一些数字和大写字 母,它表示多种错误和警告情况的代码,所以它也是分层次的。
前两位一个是错误的总分类,后三个字符表示一个情况的子类,代码5个0,“00000”代表着一个成功的状态,这可以帮 助我们快速定位问题的类型,也大概知道debug的方向在哪里。如果没有指定errcode错误严重性,特别是error或者更高 的错误标识,会默认使用ERRCODE_INTERNAL_ERROR。如果错误级别是warning标识符的这种,errcode会默认 使用ERRCODE_WARNING 。
如果错误严重级别是在notice以及以下,就会使用ERRCODE_SUCCESSFUL_COMPLETION这么一个errcode,这 是一个默认的情况,如果没有设置errcode的话。
对于我们来讲,有的时候不用errcode是一个很方便的情况,但是如果考虑不用errcode,要很清楚自己不用的原因是什 么,考虑一下它们是否合适。
剩下就是errmsg。errmsg主要是提供消息主体,就是要报错的信息。然后就是ereport,ereport这里边实际上还有很多 辅助函数,就里提到了我们的errcode(),errmsg()这里边都是辅助函数,还有很多其他的辅助函数,这些辅助函数大家 可以在PG的官网上进行查看。
以上内容摘自《PolarDB for PostgreSQL 源码与应用实战》电子书,点击https://developer.aliyun.com/ebook/download/7773可下载完整版
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
PolarDB 分布式版 (PolarDB for Xscale,简称“PolarDB-X”) 采用 Shared-nothing 与存储计算分离架构,支持水平扩展、分布式事务、混合负载等能力,100%兼容MySQL。 2021年开源,开源历程及更多信息访问:OpenPolarDB.com/about