SELECT FOR UPDATE блокирует выбранные строки до конца транзакции. Другая транзакция с FOR UPDATE или изменением этих строк будет ждать. Используют для пессимистичной блокировки при "прочитал-изменил-записал". FOR UPDATE SKIP LOCKED - пропускать заблокированные строки (очереди задач). В Go выполняют в той же транзакции перед UPDATE.
tx.QueryRowContext(ctx, "SELECT * FROM orders WHERE id = $1 FOR UPDATE", id)
// затем UPDATE в той же tx