松尾です。

「PostgreSQL用拡張ライブラリ」を使っていて、分からないところがあるので
教えてください。execが失敗したときの例外をrescueできないのですが、どう
すれば良いでしょうか?

環境とサンプルコード、結果は以下の通りです。よろしくお願いします。

<環境>
TurboLinux 4.2
PostgreSQL 6.5.2 on i586-pc-linux-gnu, compiled by gcc egcs-2.91.60
ruby 1.4.2 (1999-09-18) [i586-linux]
PostgreSQL用拡張ライブラリ  version 0.5.3
</環境>

<コード name="p.rb">
require "postgres"

connection = PGconn.connect("localhost", 5432, "", "", "")

#connection.exec("drop table testtable;")
connection.exec("create table testtable (id integer not null,primary key (id));")

(0..2).each{|i|
  connection.exec("insert into testtable (id) values (#{i});")
  p "inserted #{i}"
}

begin
  connection.exec("insert into testtable (id) values (1);")
  p "inserted #{1}"
rescue
  p "rescued"
end
</コード>

<結果>
$ ruby p.rb
NOTICE:  CREATE TABLE/PRIMARY KEY will create implicit index 'testtable_pkey' for table 'testtable'
"inserted 0"
"inserted 1"
"inserted 2"
p.rb:14:in `exec': server fatal error. Please report to your db administrator (PGError)
        from p.rb:14 
$
</結果>

--

# 冬休みはrdbcで遊ばさせて頂く予定です。