Techioz Blog

Ruby を使用した postgres でクエリが失敗したかどうかを確認するにはどうすればよいですか?

概要

これはコンテキストの基本的なコードです

require 'pg'

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

puts response

select ステートメントではないステートメントの応答を出力しようとするたびに、前のコードが示すように、クエリの実行時に作成される Result オブジェクトのアドレスを取得します。

クエリが失敗したかどうかを知る方法はありますか?

「pg」gem ドキュメントにアクセスしましたが、select ステートメントの実行についてのみ言及されており、私の場合には役に立ちませんでした。

解決策

PG::Connection#exec のドキュメントには次のように書かれています。

したがって、クエリが失敗すると、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