从Ruby运行sql脚本

从Ruby运行sql脚本,ruby,postgresql,dbi,Ruby,Postgresql,Dbi,使用DBI::DatabaseHandle#execute或DBI::DatabaseHandle#prepare无法运行sql脚本(使用多个sql语句)。它失败,出现以下错误: 错误:无法在准备好的语句中插入多个命令 我尝试使用DBI::DatabaseHandle#do(文档称它“直接进入DBD的实现”)使用“未准备好”的方式,但它一直抛出相同的错误 代码段: require 'dbd/pg' require 'dbi' DBI.connect("dbi:pg:database=dbnam

使用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补丁级别111)[i386-mswin32]

dbi-0.4.3

dbd-pg-0.3.9

pg-0.9.0-x86-mswin32


谢谢大家!

使用一个函数或只运行多个准备好的查询。

DBD-Pg中缺少使用DatabaseHandle#do运行多个查询的功能。请参阅Ruby/DBI功能

注意,DBD Pg所基于的本机postgresql Ruby驱动程序Pg允许运行多个查询

例如:

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

为了运行多个准备好的查询,我需要使用一些sql解析器来解析sql脚本?如何在ruby中实现这一点?我不明白你使用函数的意思。我说的是PostgreSQL函数,不是ruby函数。