sql >> Database >  >> RDS >> PostgreSQL

Opgestelde verklaring over Postgresql in Rails

Als je prepare . wilt gebruiken als dat zo is, moet je een paar wijzigingen aanbrengen:

  1. Het PostgreSQL-stuurprogramma wil genummerde tijdelijke aanduidingen zien ($1 , $2 , ...) geen vraagtekens en u moet uw voorbereide verklaring een naam geven:

     ActiveRecord::Base.connection.raw_connection.prepare('some_name', "DELETE FROM my_table WHERE id = $1")
    
  2. De aanroepvolgorde is prepare gevolgd door 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 ])
    

De bovenstaande aanpak werkt voor mij met ActiveRecord en PostgreSQL, uw PG::Connection.open versie zou moeten werken als je goed verbinding maakt.

Een andere manier is om zelf te citeren:

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

Dat is het soort dingen dat ActiveRecord meestal achter je rug doet.

Rechtstreekse interactie met de database is meestal een beetje een puinhoop met Rails, omdat de mensen van Rails denken dat je het nooit zou moeten doen.

Als je echt gewoon een rij probeert te verwijderen zonder interferentie, kun je delete gebruiken :

delete()

[...]

De rij wordt eenvoudig verwijderd met een SQL DELETE statement op de primaire sleutel van het record, en er worden geen callbacks uitgevoerd.

Dus je kunt dit gewoon zeggen:

MyTable.delete(id)

en je stuurt een simpele delete from my_tables where id = ... in de database.




  1. CTE-recursie om boomhiërarchie te krijgen

  2. SQL:vind het maximale record per groep

  3. MySQL-query om best verkopende producten te krijgen

  4. Gegevensbestanden samenvoegen met Statistica, deel 2