Migrate Odoo 17 to 19
Last updated: March 2026
Migrating Odoo Community Edition from version 17 to 19 involves 284 models added or removed, 50 module merges, and 72 field renames. OCU automates this entire process — upload your database backup and download a production-ready database running Odoo 19.
New to Odoo upgrades? Start with our guide on how to upgrade Odoo Community Edition, which covers the options, the preparation and the steps that apply to every version.
What changes
Between Odoo 17 and 19, the following major changes occur: 26 model renames, 327 constraint changes, and 72 field renames, alongside the 284 models added or removed.
Counted from the Odoo source of each version and from the OCU migration mappings, step by step; Odoo’s internal test modules are left out because they never exist in a production database. Multi-step paths add up their steps.
- Two-step migration handled automatically. OCU chains 17→18 and 18→19 into a single operation. Upload a v17 backup, download a v19 database ready to use.
- ir_property conversion + model rename wave. First handles the ir_property → JSONB conversion (17→18), then Odoo 19’s HR, units-of-measure and inventory restructuring. Both applied in sequence.
- 50 modules consolidated. Across both steps, 50 modules are merged into their parent modules. Sales configurator, accounting, HR contracts, and POS modules are all simplified.
- 327 constraint changes. Combined constraint changes from both steps: 120 in 17→18 and 207 in 18→19, where 98 constraints are added and 80 removed.
What changes in detail
Here is a detailed breakdown of the structural changes between Odoo 17 and 19:
Step 1: Odoo 17 to 18
- ir_property table converted to JSONB. Company-dependent fields move from the ir_property table to native JSONB columns on each model. Affects product prices, default accounts, stock locations, and dozens of other company-specific settings. The ir_property table is dropped after data migration.
- Product configurator merged, 4 payment modules removed. sale_product_configurator folds into sale. payment_alipay, payment_payulatam, payment_payumoney, and pos_mercury are dropped. Data tables are preserved but integrations stop functioning.
- Inherited views cleared for reload. All inherited views have their arch_db cleared so Odoo 18 reloads them from updated XML definitions. Website builder customizations are preserved where possible.
- 25 modules merged, 29 fields renamed. Module consolidation continues from v17 with product configurator fields restructured. All domain references and filters are updated.
Step 2: Odoo 18 to 19
- 15 model renames. procurement.group becomes stock.reference, stock.quant.package becomes stock.package, hr.contract becomes hr.version, product.packaging becomes product.uom, stock.valuation.layer becomes product.value, and 10 others. Tables, foreign keys and registry entries are updated. (Odoo also renames over a hundred of its internal test models in this release; they never exist in a production database.)
- web_editor becomes html_builder. The web editor module is renamed. Views, assets, and template inheritance are all updated to the new module name.
- Core field renames: groups_id to group_ids. res.users.groups_id becomes group_ids, affecting every security rule domain in the system. res.groups.users becomes user_ids. OCU updates all text references globally.
- translate field type conversion. The ir_model_fields.translate column changes from Boolean to Selection (varchar). This conversion happens before Odoo starts to prevent incorrect field type patching.
- 207 constraint changes. 98 constraints added, 80 removed and 29 changed. Your data is checked against the new constraints before they apply.
Cumulative impact
- 72 field renames across both steps. 29 fields renamed in 17 to 18 (product configurator consolidation) and 43 in 18 to 19 (groups_id, users and 41 others). All domain references, filters, and server actions are updated at each step.
- 50 modules consolidated. Across both steps, 50 modules merge into their parent modules. Includes sales configurator, payment providers, HR contracts, and POS extensions.
- Two major architectural shifts. The database undergoes two large changes: the ir_property to JSONB conversion (v18) and the HR, units-of-measure and inventory restructuring (v19). Each step is fully validated before the next begins.
- HR fully restructured. HR data passes through the v18 JSONB conversion (company-dependent HR fields) and then the v19 restructuring where hr_contract merges into hr and hr.contract becomes hr.version. Employee data is preserved throughout.
Migration path
This is a 2-step migration handled automatically. You upload a version 17 backup and download a version 19 result — no intermediate steps required.
- Step 1: 17 → 18 — 155 models added or removed, 25 module merges, 120 constraint changes.
- Step 2: 18 → 19 — 129 models added or removed, 25 module merges, 207 constraint changes.
Before you migrate
- Back up your database. Create a fresh backup from Odoo’s database manager (Settings → Database Manager). The .zip format includes your filestore.
- Note your installed modules. Check Settings → Apps for any third-party or custom modules. These will need updated versions for Odoo 19 after migration.
- Run a test migration first. Test migrations are free and unlimited. Verify the result before committing a production credit.
- Plan your custom module updates. OCU handles standard Odoo modules. Custom or third-party modules need separate updates for Odoo 19 compatibility.
How it works
- Upload your .zip, .sql, or .dump backup. We auto-detect the source version.
- Migrate. We handle schema changes, module merges, field renames, and data migration across all 2 steps.
- Download your upgraded backup, ready for Odoo 19.
What OCU handles automatically
- Schema changes. Column types, table renames, new required fields — all structural database changes are applied automatically.
- Module merges. When Odoo consolidates modules between versions, OCU updates the module registry and migrates data to the new locations.
- Field renames. Fields that change names between versions are renamed in the database, including references in domains, filters, and server actions.
- Constraint validation. New CHECK and UNIQUE constraints are validated against your data, with automatic fixes for common violations.
- View updates. Inherited views are reset so Odoo 19 can reload them from the updated XML definitions.
- Filestore. Your attachments, images, and documents are preserved and included in the output.
Pricing
Test migrations are free and unlimited — run as many as you need to validate the upgrade. The output is neutralized (emails disabled, crons off) so it’s safe to explore but not for production use.
Production migrations cost one credit (99€), charged only when the migration completes successfully. If the migration fails, no credit is consumed. One credit covers the full path regardless of how many steps are involved (this 2-step migration costs the same as a single-step one).
Frequently asked questions
- Can I skip Odoo 18 and go from 17 to 19?
- You don’t need to install Odoo 18 separately. OCU chains 17→18 and 18→19 into one operation. Upload a v17 backup, download a v19 result.
- What are the main changes between Odoo 17 and 19?
- Two major shifts: Odoo 18 converts ir_property to JSONB (company-dependent field restructuring), and Odoo 19 restructures HR (contracts become versions), units of measure and inventory valuation. Combined: 284 model changes, 72 field renames, 50 module merges.
- How much does a 17 to 19 migration cost?
- One credit (99€), same as any migration regardless of steps. Test migrations are free and unlimited. You’re only charged when a production migration completes successfully.
- What about third-party OCA modules?
- OCA modules are treated like any third-party module. Their data tables are preserved and the modules remain installed, but views are disabled during migration. After migrating, install the Odoo 19-compatible versions of your OCA modules.
- Can I test the migration before paying?
- Yes. Test migrations are completely free and unlimited, regardless of how many steps are involved. The test output has emails disabled and cron jobs turned off, so it is safe to explore without side effects.
- What happens to my sales orders and invoices?
- All transactional data is preserved through both steps: sales orders, purchase orders, invoices, payments, delivery orders, and manufacturing orders. The ir_property conversion (step 1) updates company-dependent fields, and the model renames (step 2) update internal model names, but your business data remains intact.
- Do I need to install anything on my server?
- No. OCU is a fully hosted service. Upload your database backup through the browser, the migration runs on our infrastructure, and you download the result. No software installation, no server access, and no Docker setup required.
Other migration paths
- Odoo 17 to 18 — 155 models added or removed, 25 module merges.
- Odoo 18 to 19 — 129 models added or removed, 25 module merges.
- Odoo 16 to 19 — 418 models added or removed, 74 module merges.
- Odoo 15 to 19 — 565 models added or removed, 97 module merges.
- Odoo 17 to 20 — 470 models added or removed, 85 module merges.
Further reading
- How to Upgrade Odoo Community Edition — Step-by-step guide covering all migration approaches.
- Odoo Migration Checklist — Everything to prepare before, during, and after upgrading.
- Odoo upgrade errors — Fixes for the error messages that stop real upgrades.
- What's New in Odoo 19 — Key changes affecting the 18→19 migration step.
- Going on to Odoo 20? — The same upload can go straight to 20.
- Pricing — Free test migrations, 99€ production credits.
Ready to migrate Odoo 17 to 19?
Free test migrations, unlimited runs. No credit card required.
Start your free test migration