PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Processus simultané insérant des données dans la base de données

Le moyen le plus simple semblerait être d'utiliser le niveau d'isolation de transaction 'serializable', qui empêche les lectures fantômes (d'autres personnes insérant des données qui satisferaient un SELECT précédent lors de votre transaction).

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

Il existe également des techniques telles que l'instruction "MERGE" d'Oracle - une instruction unique qui "insère ou met à jour", selon que les données sont là ou non. Je ne sais pas si Postgres a un équivalent, mais il existe des techniques pour "faire semblant" -- voir par ex. Comment écrire INSERT Requêtes IF NOT EXISTS en SQL standard .