Разница между FOR UPDATE и FOR SHARE при блокировке строк в PostgreSQL заключается в следующем:
- FOR UPDATE. 15 В этом режиме строки, выданные оператором SELECT, блокируются как для изменения. 1 Они защищаются от блокировки, изменения и удаления другими транзакциями до завершения текущей. 1
- FOR SHARE. 14 Для каждой из полученных строк запрашивается разделяемая, а не исключительная блокировка. 1 Разделяемая блокировка не позволяет другим транзакциям выполнять с этими строками UPDATE, DELETE, SELECT FOR UPDATE или SELECT FOR NO KEY UPDATE, но допускает SELECT FOR SHARE и SELECT FOR KEY SHARE. 1
Таким образом, FOR UPDATE используется, когда нужно, чтобы выбранные строки оставались неизменными до завершения транзакции, а другие транзакции не могли изменить или заблокировать эти строки конфликтующим образом. 5 FOR SHARE применяется, когда нужно прочитать строку, но при этом нельзя допустить, чтобы она как-либо изменилась другой транзакцией. 4