Nejjednodušším způsobem se zdá být použití úrovně izolace transakce 'serializable', která zabraňuje fantomovým čtením (ostatní lidé vkládají data, která by uspokojila předchozí SELECT během vaší transakce).
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);
Existují také techniky, jako je příkaz Oracle „MERGE“ – jediný příkaz, který „vloží nebo aktualizuje“ v závislosti na tom, zda tam data jsou. Nevím, jestli má Postgres ekvivalent, ale existují techniky, jak to 'fakeovat' -- viz např. Jak napsat INSERT IF NOT EXISTS dotazy ve standardním SQL .