Cara paling sederhana tampaknya adalah dengan menggunakan tingkat isolasi transaksi 'serializable', yang mencegah pembacaan phantom (orang lain memasukkan data yang akan memenuhi SELECT sebelumnya selama transaksi Anda).
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);
Ada juga teknik seperti pernyataan "MERGE" Oracle -- pernyataan tunggal yang 'menyisipkan atau memperbarui', tergantung pada apakah data ada di sana. Saya tidak tahu apakah Postgres memiliki padanan, tetapi ada teknik untuk 'memalsukannya' - lihat mis. Cara menulis INSERT JIKA TIDAK ADA kueri dalam SQL standar .