봅니다 실행 : 당신의 예에서
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
예. 좋은 질문입니다. 준비된 문장의 이름을 지우거나 재사용하는 방법은 무엇입니까? – AJcodez
@AJcodez는 "deallocate"문을 사용하여 지 웁니다. 이미 사용 된 이름으로 자신의 캐시를 관리하십시오. 안전한 매개 변수를 얻기 위해 준비/실행하려는 경우 익명의 준비된 문을 사용하십시오. – araqnid