Разница между командами SELECT FOR UPDATE и SELECT FOR NO KEY UPDATE заключается в характере блокировки строк в PostgreSQL. 14
SELECT FOR UPDATE предполагает полное изменение (или удаление) строки. 1 Строки, выбранные оператором SELECT, блокируются как для изменения и защищаются от блокировки, изменения и удаления другими транзакциями до завершения текущей. 45
SELECT FOR NO KEY UPDATE предполагает изменение только тех полей, которые не входят в уникальные индексы. 1 При таком изменении все внешние ключи остаются без изменений. 1
Таким образом, SELECT FOR UPDATE обеспечивает более строгую блокировку, в то время как SELECT FOR NO KEY UPDATE предлагает более слабый режим. 45