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

Paralleler Prozess zum Einfügen von Daten in die Datenbank

Der einfachste Weg scheint zu sein, die Transaktionsisolationsstufe „serialisierbar“ zu verwenden, die Phantomlesevorgänge verhindert (andere Personen, die Daten einfügen, die ein vorheriges SELECT während Ihrer Transaktion erfüllen würden).

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);

Es gibt auch Techniken wie die „MERGE“-Anweisung von Oracle – eine einzelne Anweisung, die „einfügt oder aktualisiert“, je nachdem, ob die Daten vorhanden sind. Ich weiß nicht, ob Postgres ein Äquivalent hat, aber es gibt Techniken, um es zu "fälschen" - siehe z. Wie schreibt man INSERT IF NOT EXISTS-Abfragen in Standard-SQL .