[pgsql-jp: 40068] rubyから利用するとエラーが出るときがあります。

Nobuyuki Inaba nobuyuki.inaba @ gmail.com
2009年 11月 25日 (水) 14:42:24 JST


稲葉と申します。
ここに質問してよいか悩みながら、困ったことが起きたのでメールさせていただきます。

OSはubuntu9.10を使っています。前のバージョンから、最近、9.10にしました。
そのせいで、使っていたデータベースはPostgreSQLが8.3から8.4になりました。
データベースを利用するのにrubyを利用しています。
同じ質問をRubyの方にも出しています。

話をかんたんにするため、例を用意しました。
---------------------------------------------------
#!/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
ぐらいだとエラーは出ません。
なにかまずいことしているとか、ごぞんじないでしょうか?
どこをうたがうとよいか正直分かりません。

なにか、どこが問題なのか分かりましたら教えていただけないでしょうか?
困ってます。



pgsql-jp メーリングリストの案内