PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Vorbereitete Erklärung zu Postgresql in Rails

Wenn Sie prepare verwenden möchten so müssen Sie ein paar Änderungen vornehmen:

  1. Der PostgreSQL-Treiber möchte nummerierte Platzhalter sehen ($1 , $2 , ...) keine Fragezeichen und Sie müssen Ihrer vorbereiteten Anweisung einen Namen geben:

     ActiveRecord::Base.connection.raw_connection.prepare('some_name', "DELETE FROM my_table WHERE id = $1")
    
  2. Die Aufrufsequenz ist prepare gefolgt von 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 ])
    

Der obige Ansatz funktioniert bei mir mit ActiveRecord und PostgreSQL, Ihrem PG::Connection.open Version sollte funktionieren, wenn Sie sich richtig verbinden.

Eine andere Möglichkeit besteht darin, selbst zu zitieren:

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

Das ist es, was ActiveRecord normalerweise hinter Ihrem Rücken tut.

Die direkte Interaktion mit der Datenbank neigt dazu, mit Rails etwas umständlich zu sein, da die Rails-Leute denken, dass Sie das niemals tun sollten.

Wenn Sie wirklich nur versuchen, eine Zeile ohne Störung zu löschen, können Sie delete verwenden :

löschen()

[...]

Die Zeile wird einfach mit einem SQL DELETE entfernt -Anweisung auf den Primärschlüssel des Datensatzes, und es werden keine Rückrufe ausgeführt.

Sie können also einfach Folgendes sagen:

MyTable.delete(id)

und Sie senden ein einfaches delete from my_tables where id = ... in die Datenbank.