准备好的陈述已经存在

我正在尝试使用pg gem中的ruby中的预处理语句。 这就是我的陈述的样子

conn.prepare("insert_values", "insert into " + objectName + "(" + headerStr + ") values (" + prep_values + ")") conn.exec_prepared("insert_values", arr) 

我一直在收到错误

准备好的语句insert_values已经存在。

我该如何解决?? 谢谢

尝试运行:

 conn.exec("DEALLOCATE name_of_prepared_statement") 

在你的例子中:

 conn.exec("DEALLOCATE insert_values") 

简单的测试,它在我的irb工作:

 1.8.7 :001 > require 'rubygems' => true 1.8.7 :002 > require 'pg' => true 1.8.7 :003 > conn = PGconn.connect(:host => 'localhost', :port => 5912, :user => 'test', :dbname => 'test' ) => # 1.8.7 :005 > conn.prepare("insert_values", "select * from data where id < $1") => # 1.8.7 :006 > conn.prepare("insert_values", "select * from data where id < $1 and id > $2") PGError: ERROR: prepared statement "insert_values" already exists from (irb):6:in 'prepare' from (irb):6 1.8.7 :007 > conn.prepare("insert_values", "select * from data where id < $1") PGError: ERROR: prepared statement "insert_values" already exists from (irb):7:in 'prepare' from (irb):7 1.8.7 :008 > conn.exec("DEALLOCATE insert_values") => # 1.8.7 :009 > conn.prepare("insert_values", "select * from data where id < $1") => # 1.8.7 :010 > conn.exec_prepared("insert_values",[200]) => # 1.8.7 :011 > conn.exec("DEALLOCATE insert_values") => # 1.8.7 :012 > conn.exec_prepared("insert_values",[200]) PGError: ERROR: prepared statement "insert_values" does not exist from (irb):12:in 'exec_prepared' from (irb):12 

这是重用prepare()的更好方法,避免prepared statement "my_statement" already exists

 sql = "select * from my_table where id = $1" begin ActiveRecord::Base.connection.raw_connection.prepare('my_statement', sql) rescue PG::DuplicatePstatement => e end pg_result = ActiveRecord::Base.connection.raw_connection.exec_prepared('my_statement', [my_table_id])