sql >> Base de Datos >  >> RDS >> PostgreSQL

Proceso concurrente que inserta datos en la base de datos.

La forma más sencilla parecería ser usar el nivel de aislamiento de transacción 'serializable', que evita lecturas fantasma (otras personas insertan datos que satisfarían un SELECT anterior durante su transacción).

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

También existen técnicas como la declaración "MERGE" de Oracle, una declaración única que "inserta o actualiza", dependiendo de si los datos están allí. No sé si Postgres tiene un equivalente, pero existen técnicas para 'falsificarlo'; consulte, p. Cómo escribir INSERTAR SI NO EXISTE consultas en SQL estándar .