使用DBI :: DatabaseHandle #execute或DBI :: DatabaseHandle#prepare它不可能运行sql脚本(带有多个sql语句)。它失败并出现以下错误:
错误:无法将多个命令插入预准备语句
我尝试使用DBI :: DatabaseHandle #do的“无准备”方式(文档称它“直接进入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
我正在使用
ruby 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 :(得分:2)
使用某个函数或只运行多个准备好的查询。
答案 1 :(得分: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