PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Declaração preparada no Postgresql no Rails


Se você quiser usar prepare assim, você precisará fazer algumas alterações:

  1. O driver PostgreSQL deseja ver os espaços reservados numerados ($1 , $2 , ...) não pontos de interrogação e você precisa dar um nome à sua declaração preparada:
     ActiveRecord::Base.connection.raw_connection.prepare('some_name', "DELETE FROM my_table WHERE id = $1")
    

  2. A sequência de chamada é prepare seguido por 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 ])
    

A abordagem acima funciona para mim com ActiveRecord e PostgreSQL, seu PG::Connection.open versão deve funcionar se você estiver se conectando corretamente.

Outra maneira é fazer a citação você mesmo:
conn = ActiveRecord::Base.connection
conn.execute(%Q{
    delete from my_table
    where id = #{conn.quote(id)}
})

Esse é o tipo de coisa que o ActiveRecord geralmente faz nas suas costas.

Interagir diretamente com o banco de dados tende a ser um pouco confuso com o Rails, já que o pessoal do Rails acha que você nunca deveria fazer isso.

Se você realmente está apenas tentando excluir uma linha sem interferência, pode usar delete :

excluir()

[...]

A linha é simplesmente removida com um SQL DELETE instrução na chave primária do registro e nenhum retorno de chamada é executado.

Então você pode apenas dizer isso:
MyTable.delete(id)

e você enviará um simples delete from my_tables where id = ... no banco de dados.