Разница между режимами FOR UPDATE и FOR SHARE в PostgreSQL заключается в уровне блокировки строк: 34
- FOR UPDATE предполагает полную блокировку строк, полученных оператором SELECT, как для изменения. 45 Это защищает их от блокировки, изменения и удаления другими транзакциями до завершения текущей. 45
- FOR SHARE устанавливает разделяемую блокировку для каждой полученной строки. 45 Разделяемая блокировка не позволяет другим транзакциям выполнять с этими строками UPDATE, DELETE, SELECT FOR UPDATE или SELECT FOR NO KEY UPDATE, но допускает SELECT FOR SHARE и SELECT FOR KEY SHARE. 5
Таким образом, FOR UPDATE блокирует другие транзакции от работы с заблокированными строками, а FOR SHARE не позволяет другим транзакциям изменять эти строки, но допускает их чтение. 24