2010-03-09 4 views
0

DBI :: DatabaseHandle # execute 또는 DBI :: DatabaseHandle #을 사용하면 SQL 스크립트 (mutiple sql statments 포함)를 실행할 수 없습니다.Ruby에서 sql 스크립트를 실행하십시오.

오류가 : 내가 DBI :: DatabaseHandle의 #을 사용하여 "준비되지 않은"방법을 사용하려고

준비된 문에 여러 명령을 삽입 할 수 없습니다 (사이먼이 말한다 그것을 "간다 그것은 다음과 같은 오류와 함께 실패 DBD의 구현으로 직선 ")하지만 동일한 오류가 발생합니다.

코드 : I가 사용하고

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 패치 레벨 111) I386-MSWIN32]

DBI-0.4.3

DBD-PG-0.3.9

PG-0.9.0-86 MSWIN32

,745,

고맙습니다!

답변

0

DatabaseHandle # do를 사용하여 여러 쿼리를 실행하는 것은 DBD-Pg에서 누락 된 기능입니다. Ruby/DBI 기능 28001을 참조하십시오.

DBD-Pg가 기반으로하는 기본 postgresql Ruby 드라이버 인 Pg는 여러 쿼리를 실행할 수 있습니다.

예 : 내가 추측 일부 SQL 구문 분석기를 사용하여 SQL 스크립트를 구문 분석 할 필요가있는 복수 준비된 쿼리를 실행하기 위해

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

? 어떻게 루비에서 이것을 할 수 있을까요? 기능 사용에 대한 귀하의 의견을 이해하지 못합니다. – nakhli

+0

저는 루비 함수가 아니라 PostgreSQL 함수에 대해 이야기하고있었습니다. –