以下是上下文的一些基本代码

require 'pg'

conn = PG.connect(db_params)
# example query:
response = conn.exec("update employees set id = 0 where role = 'owner'")

puts response

每当我try 打印不是SELECT语句的语句的响应时,我都会得到执行查询时创建的结果对象的地址,如前面的代码所示.

有没有办法知道查询是否失败?

我查看了‘PG’gem文档,它只提到了SELECT语句的执行,这对我的情况没有帮助.

推荐答案

PG::Connection#exec人的文件中写道:

向PostgreSQL发送由SQL指定的SQL查询请求.如果成功,它将返回一个包含所有结果行和列的pg::Result实例.On failure, it raises a PG::Error.

因此,如果查询失败,它将引发类型为PG::Error的异常.你可以使用begin ... rescue街区来捕捉它:

begin
  conn.exec("update employees set id = 'invalid' where role = 'owner'")
rescue PG::Error => e
  puts "#{e.class}: #{e.message}"
end

Ruby相关问答推荐

当Ruby `Complex` 类除了`==` 之外没有任何关系运算符时,它的祖先怎么能有`Comparable`?

Sinatra + Bundler?

在ruby中反转数组的顺序

如何在不将换行符粘贴到字符串中的情况下使用puts添加额外的换行符?

如何使用 RSpec 忽略或跳过测试方法?

方法如何在 Ruby 中使用哈希参数?

加载 RubyGems 插件时出错,openssl.bundle (LoadError)

ruby命令在我的 Mac 上没有任何作用

无法在 macos-10.15.6 上Bundle 安装 puma 4.3.5 或 gem puma 与 ruby​​-2.6.6

如何使用 Ruby OptionParser 指定所需的switch (不是参数)?

如何在没有 Rails 的情况下使用 RSpec?

Ruby,生成随机十六进制 colored颜色

如何在不等式中使用Ruby case ... when?

Ruby全局匹配正则表达式?

Mustache Templates 可以做模板扩展吗?

Ruby 在特定目录中运行 shell 命令

如何在没有 RVM 的 Ubuntu 上安装 Ruby 2

Capybara:按值而不是文本 Select 选项

Ruby:如何计算一个字符串在另一个字符串中出现的次数?

如何创建一个 Gemfile?