Запустите sql скрипт из Ruby - PullRequest
0 голосов
/ 09 марта 2010

Используя 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]

дБи-0,4,3

дБд-пг-0,3,9

пг-0.9.0-x86-mswin32

Спасибо!

Ответы [ 2 ]

2 голосов
/ 09 марта 2010

Используйте либо функцию, либо просто запустите несколько подготовленных запросов.

0 голосов
/ 25 марта 2010

Выполнение нескольких запросов с использованием DatabaseHandle # do является отсутствующей функцией в DBD-Pg. См. Функцию Ruby / DBI 28001 .

Обратите внимание, что Pg, собственный драйвер Ruby postgresql, на котором основан DBD-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
...