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

Трябва ли да включа SELECT в транзакция?

Кратката версия:„Зависи“.

Дългата версия:

Ако правите цикъл за четене-промяна-запис, тогава не само трябва да е в транзакция, но трябва да SELECT ... FOR UPDATE всички записи, които по-късно възнамерявате да промените. В противен случай ще рискувате загубени записи, при които презаписвате актуализация, направена от някой друг между момента, в който сте прочели записа, и момента, в който сте написали актуализацията.

SERIALIZABLE изолирането на транзакции също може да помогне с това.

Наистина трябва да разберете едновременността и изолацията. За съжаление единственият прост и лесен отговор „просто направете X“, без да го разбирате, е да започнете всяка транзакция, като заключите всички включени маси. Повечето хора не искат да правят това.

Предлагам да прочетете (или две, или три, или четири - това е труден материал) на документите за изолация на tx . Експериментирайте с едновременен psql сесии (множество терминали) за създаване на състезателни условия и конфликти.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Автоматизирани надстройки на PostgreSQL клъстери в облак с почти нулев престой (част II)

  2. Python psycopg2 copy_from() за зареждане на данни извежда грешка за нулеви стойности на цяло число:DataError:невалиден синтаксис на въвеждане за цяло число:

  3. postgres - ГРЕШКА:операторът не съществува

  4. Защо psycopg2 INSERT отнема толкова време, за да работи в цикъл и как да го ускоря?

  5. ADO работи ли с ODBC драйвери или само с OLE DB доставчици?