[pgsql-jp: 40071] Re: rubyから利用するとエラーが出るときがあります。
Nobuyuki Inaba
nobuyuki.inaba @ gmail.com
2009年 11月 25日 (水) 16:26:00 JST
ありがとうございます! エラーが出ませんでした。
sth.execute(#{num})
の部分、を
sth.execute("#{num}")
とすれば、うまく行きました。
この様な使い方はどこを調べたらよいか教えていただけませんか?
このサンプル場合、値の変えたいのは、1ヶ所ですが、2ヶ所以上になったとき、
sql = "INSERT INTO t01(key) values(?); "
sql = "INSERT INTO t01(key,key2,key3) values(?ここはどうする); "
どうするといいか知りたいのです。
すみませんが教えてください。よろしくお願いします。
2009年11月25日15:02 川原泰三 <t_kawahara-osk @ sdcns.co.jp>:
> 初めまして。川原と申します。
> rubyの事は分からないのですが、「準備された文」=prepareが原因と
> 考えられますので、以下のように書き直しては如何でしょう?
>
> for i in 0 .. 10000
> num = rand(1000)
> sql = "INSERT INTO t01(key) values(#{num}); "
> sth = conn.prepare(sql)
> sth.execute
> puts i
> end
>
> ↓
>
> sql = "INSERT INTO t01(key) values(?); "
> sth = conn.prepare(sql)
> for i in 0 .. 10000
> num = rand(1000)
> sth.execute(#{num})
> puts i
> end
>
>> ----- Original Message -----
>> From: PostgreSQL Japanese Mailing List <pgsql-jp @ ml.postgresql.jp>
>> To: pgsql-jp @ ml.postgresql.jp
>> Sent: 2009/11/25 14:42:56
>> Subject: [pgsql-jp: 40068] rubyから利用するとエラーが出るときがあります。
>>
>> 稲葉と申します。
>> ここに質問してよいか悩みながら、困ったことが起きたのでメールさせていただき
> ます。
>>
>> 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::Programmi
> ngError)
>> 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 メーリングリストの案内