sql >> データベース >  >> RDS >> PostgreSQL

準備されたステートメントはすでに存在します

    実行してみてください:

    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' )
      => #<PGconn:0x7fe6ac703970> 
    1.8.7 :005 > conn.prepare("insert_values", "select * from data where id < $1")
      => #<PGresult:0x7fe6ac6b2e58> 
    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")
      => #<PGresult:0x7fe6ac6738c0> 
    1.8.7 :009 > conn.prepare("insert_values", "select * from data where id < $1")
      => #<PGresult:0x7fe6ac665fe0> 
    1.8.7 :010 > conn.exec_prepared("insert_values",[200])
      => #<PGresult:0x7fe6ac65d188> 
    1.8.7 :011 > conn.exec("DEALLOCATE insert_values")
      => #<PGresult:0x7fe6ac654df8> 
    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
    


    1. カンマ区切りの値を持つリストをフェッチするPostgres

    2. バインドされたパラメータを複数回使用する

    3. TABLEFULLSCANデータアクセス方式を使用しないOracleクエリ結果のページ付け

    4. MySQLのメモリ使用率が高いかどうかを確認する方法