sql >> Databasteknik >  >> RDS >> PostgreSQL

Samtidig process som infogar data i databasen

Det enklaste sättet verkar vara att använda transaktionsisoleringsnivån "serialiserbar", som förhindrar fantomläsningar (andra personer infogar data som skulle tillfredsställa ett tidigare SELECT under din transaktion).

if (!conn.getMetaData().supportsTransactionIsolationLevel(Connection.TRANSACTION_SERIALIZABLE)) {
    // OK, you're hosed. Hope for your sake your drivers supports this isolation level 
}
conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);

Det finns också tekniker som Oracles "MERGE"-sats - ett enda uttalande som "infogar eller uppdaterar", beroende på om data finns där. Jag vet inte om Postgres har en motsvarighet, men det finns tekniker för att "fejka det" -- se t.ex. Hur man skriver INSERT OM INTE FINNS-frågor i standard SQL .



  1. Hur man hämtar nodnummer baserat på överordnad nod dynamiskt från xsd-fil med PHP

  2. Kryptera kolumndata med LINQ

  3. Hur man hoppar över rad när man importerar dålig MySQL-dump

  4. MySQL/PHP foreach visas fortfarande bara först i databasen