sql >> Databasteknik >  >> RDS >> PostgreSQL

Utarbetat uttalande om Postgresql i Rails

Om du vill använda prepare sådär då måste du göra ett par ändringar:

  1. PostgreSQL-drivrutinen vill se numrerade platshållare ($1 , $2 , ...) inte frågetecken och du måste ge ditt förberedda påstående ett namn:

     ActiveRecord::Base.connection.raw_connection.prepare('some_name', "DELETE FROM my_table WHERE id = $1")
    
  2. Anropssekvensen är prepare följt av 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 ])
    

Ovanstående tillvägagångssätt fungerar för mig med ActiveRecord och PostgreSQL, din PG::Connection.open version bör fungera om du ansluter korrekt.

Ett annat sätt är att göra citeringen själv:

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

Det är sånt som ActiveRecord vanligtvis gör bakom din rygg.

Att direkt interagera med databasen tenderar att vara lite av en röra med Rails eftersom Rails-folket inte tycker att du någonsin ska göra det.

Om du verkligen bara försöker ta bort en rad utan störningar kan du använda delete :

delete()

[...]

Raden tas helt enkelt bort med en SQL DELETE på postens primärnyckel, och inga återuppringningar utförs.

Så du kan bara säga så här:

MyTable.delete(id)

och du skickar en enkel delete from my_tables where id = ... in i databasen.




  1. Steg för steg uppgraderingsprocess till R12.2 Uppgradering del -3

  2. Hur man väljer datum utan tid i SQL

  3. Uppdatera en kolumn i MySQL

  4. Hämta uppgifterna från förra månaden i SQL-servern