I had version 17 installed, I wanted to upgrade to version 20.
I launched the container for the new version, but got an error: "Exception: Updates between multiple major versions and downgrades are unsupported."
I then tried launching the container for version 18, which should be supported, which initially seemed to succeed! However, I was greeted by "Internal Server Error" in the web UI, since apparently instead of just quitting, the initial upgrade had ruined the DB schema.
After restoring version 17 from backup, migrating to 18 and onwards, then trying to register my local apps with it, I then got CSP errors in the console when signing in. After manually editing the configuration file (which you seemingly can't do through environment variables) that seemed to be resolved.
Then, I tried syncing my local files but realized that the size of all of them is suddenly 0 KB. The files would show up in the web UI, but the size would be 0 KB. I had to rename the files a few times, which eventually fixed that, no matter how odd.
Finally, I realized that trying to open any of the pages in the web UI would take around 3-10 seconds. It seemed that there was a bug in the Talk application, disabling which then gave me the expected performance, even if it affecting how the Files application works also seems odd.
I like the utility Nextcloud provides me, but despise updating it. At this point I just stick to the core apps and wipe the whole thing when I need to update to something newer, manually carrying over the files I want to sync in the new instance.
Oh, also, out of the box the DB file locking configuration causes large file uploads (a few GB) to just hang, in a way where I cannot delete them. I had to disable locking altogether.
Honestly, it's just weird. If you need 1000 SQL migrations to go from version 1 of your software to version 20, just include all of them and don't mess around with disallowing migrating across multiple major versions. Same for any changes that might impact the persisted files on the FS. Just have updates be one continuous, long stream of patches, applied sequentially. If you do that and have sane defaults, you're good.
To not be overly negative: it's good that Nextcloud exists, is free, has a somewhat nice ecosystem around it and both the desktop apps and the phone apps for iOS/Android are okay.