From: Nobuyuki Inaba Date: 2009-11-25T14:30:07+09:00 Subject: [ruby-dev:39769] require 'dbi' でうまくゆかないときがあります。 稲葉と申します。 ここに質問してよいか悩みながら、困ったことが、おきたのでメールさせていただきます。 OSはubuntu9.10を使っています。前のバージョンから、最近、9.10にしました。 そのせいで、使っていたデータベースはPostgreSQLが8.3から8.4になりました。 話をかんたんにするため、例を用意しました。 --------------------------------------------------- #!/usr/bin/ruby require 'dbi' begin conn = DBI.connect('DBI:PG:testdb:localhost', 'test01', '123456789') sql = " CREATE TABLE t01 ( id serial NOT NULL PRIMARY KEY, key integer );" sth = conn.prepare(sql) sth.execute for i in 0 .. 10000 # ここが 10000 ではなく、100ぐらいだとエラーはでない。 num = rand(1000) sql = "INSERT INTO t01(key) values(#{num}); " sth = conn.prepare(sql) sth.execute puts i end end ------------------------------------------------------------------ というプログラムを実行しますと、 0 1 .... 890 891 /usr/lib/ruby/1.8/dbd/pg/statement.rb:62:in `execute': ERROR: 準備された文"ruby-dbi:Pg:70118378567060"はすでに存在します (DBI::ProgrammingError) from /usr/lib/ruby/1.8/dbi/handles/statement.rb:116:in `execute' from ich024-2.rb:19 from ich024-2.rb:15:in `each' from ich024-2.rb:15 と言うようにエラーが表示されます。 以前のPostgreSQL8.3では出なかったと思いますが、このエラーメッセージはどうすればよいかわかりません。 また、 for i in 0 .. 10000 の部分を for i in 0 .. 100 ぐらいだとエラーは出ません。 なにかまずいことしているとか、ごぞんじないでしょうか? どこをうたがうとよいか正直分かりません。 なにか、どこが問題なのか分かりましたら教えていただけないでしょうか? 困ってます。