sql >> Databáze >  >> RDS >> PostgreSQL

Souběžný proces vkládání dat do databáze

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 .



  1. přepsání modu, nadpis slugs a htaccess

  2. Dotaz SQL, kde pole NEOBSAHUJE $x

  3. Nastavte hodnotu v závislosti na grafu Helm

  4. MySQL json_arrayagg s levým spojením bez výsledků