Two hard requirements changed between Odoo 19 and 20, straight from odoo/release.py: the minimum PostgreSQL goes from 13 to 16, and the minimum Python from 3.10 to 3.12. If you're still on PostgreSQL 14 or 15, that is the first job, and it has nothing to do with Odoo itself.
Disclosure: I make a paid Odoo module for the rest of this (link at the bottom).
Then there's your data. I installed a broad set of Community apps on both versions and compared every model and field. Odoo 20 has 39 fewer models and 616 fewer fields in what I compared. Examples: res.partner.company_type, the whole hr.contract.type model, stock.scrap.
That matters because customisations don't follow the data. A view that shows company_type is valid on 19, and on 20 the field it points at is gone. The same goes for saved filters, record rules, and fields you added from the interface that point at a removed model.
I made a module that reads your database, checks it against that comparison, and lists the custom views, filters, rules and fields that will break, plus stuck modules, non-standard modules and dangling external IDs. It's called Upgrade Checker, 59 EUR on the Apps Store: https://apps.odoo.com/apps/modules/19.0/upgrade_checker/
Limits: the field comparison covers Community modules, so Enterprise fields aren't in it.
Top comments (0)