sql >> Base de Datos >  >> RDS >> PostgreSQL

Declaración preparada sobre Postgresql en Rails

Si quieres usar prepare así, tendrás que hacer un par de cambios:

  1. El controlador PostgreSQL quiere ver marcadores de posición numerados ($1 , $2 , ...) no signos de interrogación y necesita darle un nombre a su declaración preparada:

     ActiveRecord::Base.connection.raw_connection.prepare('some_name', "DELETE FROM my_table WHERE id = $1")
    
  2. La secuencia de llamada es prepare seguido de exec_prepared :

    connection = ActiveRecord::Base.connection.raw_connection
    connection.prepare('some_name', "DELETE FROM my_table WHERE id = $1")
    st = connection.exec_prepared('some_name', [ id ])
    

El enfoque anterior me funciona con ActiveRecord y PostgreSQL, su PG::Connection.open La versión debería funcionar si te estás conectando correctamente.

Otra forma es hacer la cotización usted mismo:

conn = ActiveRecord::Base.connection
conn.execute(%Q{
    delete from my_table
    where id = #{conn.quote(id)}
})

Ese es el tipo de cosas que ActiveRecord suele hacer a sus espaldas.

La interacción directa con la base de datos tiende a ser un poco complicada con Rails ya que la gente de Rails no cree que debas hacerlo nunca.

Si realmente solo está tratando de eliminar una fila sin interferencias, puede usar delete :

eliminar()

[...]

La fila simplemente se elimina con un SQL DELETE instrucción sobre la clave principal del registro y no se ejecutan devoluciones de llamada.

Así que puedes decir esto:

MyTable.delete(id)

y enviará un simple delete from my_tables where id = ... en la base de datos.