2010-03-09 3 views
0

En utilisant DBI :: DatabaseHandle # execute ou DBI :: DatabaseHandle #, il n'est pas possible d'exécuter un script sql (avec plusieurs instructions sql). Il échoue avec l'erreur suivante:Exécution du script SQL à partir de Ruby

ERREUR: ne peut pas insérer plusieurs commandes dans une déclaration préparée

J'ai essayé d'utiliser la voie « non préparé » à l'aide DBI :: DatabaseHandle # ne (le doc dit qu'il « va directement à la mise en œuvre de DBD ") mais il continue à lancer la même erreur.

extrait de code:

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 

J'utilise

rubis 1.8.6 (24/09/2007 patchlevel 111) [i386-mswin32]

DBI-0.4.3

DBD-pg-0.3.9

pg-0.9.0-x86-mswin32

Merci beaucoup!

Répondre

0

L'exécution de plusieurs requêtes à l'aide de DatabaseHandle # do est une fonctionnalité manquante dans DBD-Pg. Voir la fonction Ruby/DBI 28001.

Notez que Pg, le pilote Ruby postgresql natif sur lequel DBD-Pg est basé, permet d'exécuter plusieurs requêtes.

Exemple:

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

Utilisez une fonction ou exécutez simplement plusieurs requêtes préparées.

+0

Pour exécuter plusieurs requêtes préparées dont j'ai besoin pour analyser le script SQL en utilisant un certain analyseur SQL je suppose? Comment faire cela à ruby? Je ne comprends pas votre but d'utiliser une fonction. – nakhli

+0

Je parlais d'une fonction PostgreSQL, pas d'une fonction ruby. –

Questions connexes