2010-03-09 168 views
0

使用DBI :: DatabaseHandle#execute或DBI :: DatabaseHandle#準備好無法運行sql腳本(使用多個sql語句)。它失敗,出現以下錯誤:從Ruby運行sql腳本

錯誤:無法插入多個命令插入事先準備好的聲明

我試圖用使用DBI :: DatabaseHandle#做到「措手不及」的方式(商務部說,「去直接到DBD的實現「),但它一直拋出相同的錯誤。

代碼片斷:

require 'dbd/pg' 
require 'dbi' 

DBI.connect("dbi:pg:database=dbname", db_user, db_password, db_params) do |dbh| 
    schema = IO::read(schema_file) 
    dbh.do(schema) 
end 

我使用

紅寶石1.8.6(2007-09-24 PATCHLEVEL 111)[I386-mswin32]

DBI-0.4.3

DBD-PG-0.3.9

PG-0.9.0 86 mswin32

謝謝!

回答

0

使用DatabaseHandle#do執行多個查詢是DBD-Pg中缺少的功能。請參閱Ruby/DBI功能28001

請注意,Pg(DBD-Pg所基於的本地postgresql Ruby驅動程序)允許運行多個查詢。

例子:

require 'pg' 
require 'dbd/pg' 
require 'dbi' 

# Pg Succeeds 
PGconn.new({:host=>host,:user=>user,:password=>password,:dbname=>dbname}) do |conn| 
    conn.exec("select 1; select 1;") 
end 

# DBD-Pg Fails with: ERROR: cannot insert multiple commands ... 
DBI::connect("dbi:pg:database=#{dbname};host=#{host};", user, password) do |dbh| 
    dbh.do("select 1; select 1;") 
end 
2

使用一個函數或只運行多個準備好的查詢。

+0

爲了運行多個準備好的查詢我需要使用一些SQL解析器我想分析SQL腳本?如何在ruby中做到這一點? 我不明白你使用函數的要點。 – nakhli 2010-03-10 09:02:18

+0

我在談論一個PostgreSQL函數,而不是一個ruby函數。 – 2010-03-11 17:41:08