PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Едновременен процес, вмъкващ данни в база данни

Най-простият начин изглежда е да използвате нивото на изолация на транзакцията 'serializable', което предотвратява фантомни четения (други хора вмъкват данни, които биха удовлетворили предишен SELECT по време на вашата транзакция).

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

Съществуват и техники като оператора "MERGE" на Oracle - единичен оператор, който прави "вмъкване или актуализиране", в зависимост от това дали данните са там. Не знам дали Postgres има еквивалент, но има техники за „фалшифициране“ -- вижте напр. Как се пише INSERT IF NOT EXISTS заявки в стандартен SQL .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mac OSX Lion Postgres не приема връзки на /tmp/.s.PGSQL.5432

  2. Docker postgre невалиден първичен запис на контролна точка

  3. Показване на изображение в Ireports с помощта на PostgreSql

  4. Как Postgresql COPY TO STDIN с CSV се актуализира при конфликт?

  5. Laravel 5 актуализира ограничението за един ред не работи