代码之家  ›  专栏  ›  技术社区  ›  user2974739

Ruby“prepare”:错误:prepared语句“should_insert”已存在(PG::DuplicateStatement)

  •  1
  • user2974739  · 技术社区  · 9 年前

    我看了链接

    How to fix PG::DuplicatePstatement: ERROR?

    但它仍然没有解决我收到的错误消息

    `prepare': ERROR:  prepared statement "should_insert" already exists (PG::DuplicatePstatement)
    

    在上面的链接中,我应该将答案中的代码块放在哪里?我必须调用一个方法才能执行吗?

    db_connection = PGconn.connect("localhost", 5433, '', '', "dev_ddb", "user", "pass")
    
    db_connection.prepare('should_insert', 'SELECT COUNT(*) from users where user_id = $1')
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   user2974739    9 年前

    我能够通过取消分配准备好的语句来实现这一点。我在exec_prepared语句之后插入了这一行。

    db_connection.exec("DEALLOCATE should_insert")
    
        2
  •  0
  •   the Tin Man    2 年前

    您可以始终尝试使用开始救援块来检查声明是否已准备好,例如:

    begin 
      db_connection.describe_prepared("should_insert")
    rescue PG::InvalidSqlStatementName
      db_connection.prepare("should_insert",<<-SQL)
        'SELECT COUNT(*) from users where user_id = $1'
        SQL
    end
    

    然后用

    db_connection.exec_prepared