从Ruby运行sql脚本
使用DBI::DatabaseHandle#execute或DBI::DatabaseHandle#prepare无法运行sql脚本(使用多个sql语句)。它失败,出现以下错误: 错误:无法在准备好的语句中插入多个命令 我尝试使用DBI::DatabaseHandle#do(文档称它“直接进入DBD的实现”)使用“未准备好”的方式,但它一直抛出相同的错误 代码段:从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
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函数。