[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 メーリングリストの案内