虽然不知道为什么有这个需求,但接到了这个任务。
psql打印错误信息在 AcceptResult ,调用栈如下:当有错误时,AcceptResult -> psql_error()打印错误。
可见是在服务端就已经准备好了这个错误信息。我遇到的是一个文件访问错误,是用errcode_for_file_access 定的错误类型,进一步分析发现 ereport 宏中传入的第二个参数 errcode 中默认是 ERRCODE_INTERNAL_ERROR 内部错误,这在主循环 EmitErrorReport->cdb_tidy_message 时会将错误位置打印出来,所以在 errcode_for_file_access 中补充自己遇到的 errno 的 case 就可以了
更通用的方法是实现一个函数
使用: