PGconn.connect异常信息重复,密码错误时输出重复是否为Bug?
关于PG::ConnectionBad异常消息重复的问题解答
首先可以明确地说:这个现象不是Bug,属于pg gem在特定版本下的预期行为,下面给你详细拆解原因:
当你用PGconn.connect发起连接且密码错误时,PostgreSQL的libpq库会返回包含错误详情的消息,而pg gem在构建PG::ConnectionBad异常对象时,会直接将libpq返回的原始错误信息赋值给异常的message属性。在PostgreSQL 9.6.3搭配适配Ruby 2.4.1的pg gem版本的场景下,libpq返回的错误信息本身会包含重复内容——比如两次输出FATAL: password authentication failed for user "xxx",这就导致你执行puts e时看到重复的错误消息。
这种情况是pg gem处理libpq错误输出时的一个小细节问题,并不影响异常的正常捕获和业务逻辑处理,只是输出格式上显得冗余。如果你觉得这个重复输出影响调试体验,可以做两个优化:
- 手动处理异常消息,比如用
puts e.message.gsub(/(FATAL: .+)\1/, '\1')来去除重复内容; - 尝试升级pg gem到更新的版本,后续版本的gem已经优化了错误消息的处理逻辑,大概率会修复这个重复显示的问题。
另外补充一点:这个现象和Ruby 2.4.1、Ubuntu 16.04的环境本身无关,核心是pg gem与PostgreSQL 9.6.3的libpq库交互时的消息处理逻辑导致的。
内容的提问来源于stack exchange,提问作者RalphShnelvar
相关产品推荐
相关产品推荐

