Odoo 15更新GitHub代码重启服务后选择数据库时出现XML解析错误
Odoo 15更新GitHub代码重启服务后选择数据库时出现XML解析错误
看起来你遇到的是Odoo更新后缓存与旧数据库数据不兼容导致的问题,这种情况在旧数据库适配新核心代码时很常见,我给你几个实用的排查和解决思路:
清除Odoo缓存
错误栈里明确出现了KeyError指向ir.qweb的缓存项,说明旧缓存和新代码的结构不匹配了。你可以直接操作数据库清除缓存表:- 登录PostgreSQL,切换到你的目标数据库
- 执行SQL命令:
DELETE FROM ir_cache; - 重启Odoo服务
也可以临时用odoo-bin --without-cache启动服务,跳过缓存加载验证问题。
强制更新视图与翻译数据
报错的核心是ValueError: can only parse strings,出现在XML翻译解析环节,大概率是旧的视图架构(arch字段)或者翻译数据异常。可以尝试:- 先重置视图的文件系统缓存:
UPDATE ir_ui_view SET arch_fs = NULL; - 用命令行强制更新所有模块并重新加载语言:
替换odoo-bin -d 你的数据库名 --update all --load-language en_US你的数据库名为实际名称,这会重新生成所有视图结构和翻译数据。
- 先重置视图的文件系统缓存:
排查第三方模块兼容性
如果你安装了第三方自定义模块,很可能是这些模块的视图或逻辑和更新后的Odoo核心不兼容。可以先禁用所有非官方模块,重启Odoo后看看是否能正常访问数据库,如果恢复正常,再逐个启用模块排查出问题的那个,针对性修复或更新模块代码。修复异常的视图/翻译记录
如果上面的方法都没效果,可能是某个特定视图的arch字段为空或者不是合法字符串,或者翻译表ir_translation里存在异常值。可以通过SQL查询定位问题记录:- 检查空值视图:
SELECT * FROM ir_ui_view WHERE arch IS NULL; - 检查异常翻译:
SELECT * FROM ir_translation WHERE value IS NULL OR value = '';
找到异常记录后,要么删除(如果是无用记录),要么手动修复为合法的XML字符串或翻译文本。
- 检查空值视图:
另外你提到新数据库能正常运行,这是因为新数据库没有旧的缓存、视图和翻译遗留数据,完全基于新代码生成,所以不会出现兼容性冲突。
备注:内容来源于stack exchange,提问作者Neo Matrix




