PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Czy powinienem uwzględnić SELECT w transakcji?

Krótka wersja:„To zależy”.

Długa wersja:

Jeśli robisz cykl odczytu-modyfikacji-zapisu, to nie tylko musi to być transakcja, ale musisz SELECT ... FOR UPDATE wszelkie zapisy, które zamierzasz później modyfikować. W przeciwnym razie ryzykujesz utratę zapisów, gdy nadpisujesz aktualizację dokonaną przez kogoś innego między przeczytaniem rekordu a napisaniem aktualizacji.

SERIALIZABLE izolacja transakcji również może w tym pomóc.

Naprawdę musisz zrozumieć współbieżność i izolację. Niestety, jedyną prostą i łatwą odpowiedzią typu „po prostu zrób X” bez zrozumienia tego jest rozpoczęcie każdej transakcji od zablokowania wszystkich stołów. Większość ludzi nie chce tego robić.

Proponuję przeczytać (albo dwa, trzy, albo cztery - to twardy materiał) dokumentacja izolacji tx . Eksperymentuj z równoczesnym psql sesje (wiele terminali) w celu stworzenia warunków wyścigu i konfliktów.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak Sind() działa w PostgreSQL

  2. Jak policzyć grupę według zapytania w NodeJS Sequelize

  3. Najlepszy sposób na uzyskanie liczby wyników przed zastosowaniem LIMIT

  4. Jak utworzyć użytkownika za pomocą pgAdmin

  5. Jak ustawić limit czasu instrukcji dla wykonania zapytania