Hola,
Estoy intentando migrar una base de datos de Odoo 14 a Odoo 15 utilizando OpenUpgrade V15, el problema contra el que me estoy enfrentando es que cuando ejecuto la migración me da un fallo en el script del modulo base ("openupgrade_scripts/scripts/base/15.0.1.3/pre-migration.py) y no se identificar si el fallo es cosa de mi base de datos,un bug de como el código intenta convertir el campo o es la configuracion de mi entorno, el error en cuestión es este:
2024-07-05 07:32:40,222 12482 ERROR CAPEL_14 odoo.sql_db: bad query: UPDATE res_company SET report_footer = NULL WHERE report_footer = ''
ERROR: invalid input syntax for type json
LINE 1: ...es_company SET report_footer = NULL WHERE report_footer = ''
^
DETAIL: The input string ended unexpectedly.
CONTEXT: JSON data, line 1:
2024-07-05 07:32:40,222 12482 ERROR CAPEL_14 OpenUpgrade: base: error in migration script /opt/odoo15/odoo/custom-addons/openupgrade_scripts/scripts/base/15.0.1.3/pre-migration.py: invalid input syntax for type json
LINE 1: ...es_company SET report_footer = NULL WHERE report_footer = ''
^
DETAIL: The input string ended unexpectedly.
CONTEXT: JSON data, line 1:
2024-07-05 07:32:40,223 12482 ERROR CAPEL_14 OpenUpgrade: invalid input syntax for type json
LINE 1: ...es_company SET report_footer = NULL WHERE report_footer = ''
^
DETAIL: The input string ended unexpectedly.
CONTEXT: JSON data, line 1:
Traceback (most recent call last): File "/opt/odoo15/odoo/venv/lib/python3.9/site-packages/openupgradelib/openupgrade.py", line 2292, in wrapped_function
func(
File "/opt/odoo15/odoo/custom-addons/openupgrade_scripts/scripts/base/15.0.1.3/pre-migration.py", line 80, in migrate
openupgrade.convert_field_to_html(
File "/opt/odoo15/odoo/venv/lib/python3.9/site-packages/openupgradelib/openupgrade.py", line 2471, in convert_field_to_html
cr.execute( # pylint: disable=E8103
File "", line 2, in execute
File "/opt/odoo15/odoo/odoo/sql_db.py", line 90, in check
return f(self, *args, **kwargs)
File "/opt/odoo15/odoo/odoo/sql_db.py", line 311, in execute
res = self._obj.execute(query, params)
psycopg2.errors.InvalidTextRepresentation: invalid input syntax for type json
LINE 1: ...es_company SET report_footer = NULL WHERE report_footer = ''
^
La funcion que falla seria esta
@openupgrade.migrate(use_env=False)
def migrate(cr, version):
"""
Don't request an env for the base pre-migration as flushing the env in
odoo/modules/registry.py will break on the 'base' module not yet having
been instantiated.
"""
if "openupgrade_framework" not in tools.config["server_wide_modules"]:
logging.error(
"openupgrade_framework is not preloaded. You are highly "
"recommended to run the Odoo with --load=openupgrade_framework "
"when migrating your database."
)
openupgrade.rename_xmlids(cr, rename_xmlids_l10n_ec)
openupgrade.rename_xmlids(cr, rename_xmlids_mail)
openupgrade.update_module_names(cr, renamed_modules.items())
openupgrade.update_module_names(cr, merged_modules.items(), merge_modules=True)
openupgrade.clean_transient_models(cr)
openupgrade.convert_field_to_html(
cr, "res_company", "report_footer", "report_footer"
)
openupgrade.convert_field_to_html(
cr, "res_company", "report_header", "report_header"
)
openupgrade.convert_field_to_html(
cr, "res_partner", "comment", "comment", verbose=False
)
Eh probado añadir antes la query que falla este trozo de codigo modificandola para que no me de fallo:
cr.execute("""
UPDATE res_company
SET report_footer = NULL
WHERE report_footer::text = '""';
""")
Y sigue dando el mismo error...
Probe a avanzar y solucionarlo despues comentando la parte de:
openupgrade.convert_field_to_html(
cr, "res_company", "report_footer", "report_footer"
)
Pero mas adelante en la migración me vuelve a dar el fallo del formato json, así que creo que no es la solución.
Eh comprobado haciendo un SELECT en postgres para comprobar si tengo alguno de esos campos vacíos y obtengo esto:
Si lo hago tal cual quiere hacer el scrip me da le mismo fallo que cuando intenta actualizar:
CAPEL_14=# SELECT * FROM res_company WHERE report_footer = '';
ERROR: invalid input syntax for type json
LINE 1: SELECT * FROM res_company WHERE report_footer = '';
^
DETAIL: The input string ended unexpectedly.
CONTEXT: JSON data, line 1:
Si lo hago con '""' no me encuentra nada:
SELECT * FROM res_company WHERE report_footer = '""';
(0 rows)
Eh probado a cambiar el tipo de la columna directamente:
ALTER TABLE res_company ALTER COLUMN report_footer SET DATA TYPE text USING report_footer::text;
Y ya no me da el error, el problema es que mas adelante me da este fallo:
File "/opt/odoo15/odoo/custom-addons/openupgrade_framework/odoo_patch/odoo/addons/base/models/ir_ui_view.py", line 17, in _check_xml
return View._check_xml._original_method(self)
File "/opt/odoo15/odoo/odoo/addons/base/models/ir_ui_view.py", line 430, in _check_xml
combined_arch = view._get_combined_arch()
File "/opt/odoo15/odoo/odoo/addons/base/models/ir_ui_view.py", line 993, in _get_combined_arch
arch = root.with_prefetch(tree_views._prefetch_ids)._combine(hierarchy)
File "/opt/odoo15/odoo/odoo/addons/base/models/ir_ui_view.py", line 911, in _combine
combined_arch = etree.fromstring(self.arch)
File "src/lxml/etree.pyx", line 3237, in lxml.etree.fromstring
File "src/lxml/parser.pxi", line 1896, in lxml.etree._parseMemoryDocument
File "src/lxml/parser.pxi", line 1777, in lxml.etree._parseDoc
File "src/lxml/parser.pxi", line 1082, in lxml.etree._BaseParser._parseUnicodeDoc
File "src/lxml/parser.pxi", line 615, in lxml.etree._ParserContext._handleParseResultDoc
File "src/lxml/parser.pxi", line 725, in lxml.etree._handleParseResult
File "src/lxml/parser.pxi", line 654, in lxml.etree._raiseParseError
File "", line 1
lml.etree.XMLSyntaxError: Document is empty, line 1, column 1
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/opt/odoo15/odoo/odoo/modules/registry.py", line 87, in new
odoo.modules.load_modules(registry, force_demo, status, update_module)
File "/opt/odoo15/odoo/odoo/modules/loading.py", line 415, in load_modules
loaded_modules, processed_modules = load_module_graph(
File "/opt/odoo15/odoo/odoo/modules/loading.py", line 222, in load_module_graph
load_data(cr, idref, mode, kind='data', package=package)
File "/opt/odoo15/odoo/odoo/modules/loading.py", line 69, in load_data
tools.convert_file(cr, package.name, filename, idref, mode, noupdate, kind)
File "/opt/odoo15/odoo/odoo/tools/convert.py", line 748, in convert_file
convert_xml_import(cr, module, fp, idref, mode, noupdate)
File "/opt/odoo15/odoo/odoo/tools/convert.py", line 814, in convert_xml_import
obj.parse(doc.getroot())
File "/opt/odoo15/odoo/odoo/tools/convert.py", line 734, in parse
self._tag_root(de)
File "/opt/odoo15/odoo/odoo/tools/convert.py", line 683, in _tag_root
f(rec)
File "/opt/odoo15/odoo/odoo/tools/convert.py", line 696, in _tag_root
raise ParseError('while parsing %s:%s, somewhere inside\n%s' % (
odoo.tools.convert.ParseError: while parsing /opt/odoo15/odoo/odoo/addons/base/data/ir_module_category_data.xml:134, somewhere inside
record model="ir.module.category" id="module_category_extra"
field name="name">Other Extra Rights
field name="sequence">102
/record
2024-07-05 11:16:05,009 15068 CRITICAL CAPEL_14 odoo.service.server: Failed to initialize database `CAPEL_14`.
Que creo que tiene algo que ver porque cuando intento buscar una vista en ir.module.category que este vacia me da el mismo error invalid input syntax for type json
Ya no se como seguir, os dejo un poco mas de informacion:
La BBDD V14 no tiene modulos personalizados salvo los originales y los de la OCA.
Hice una instalación limpia en un servidor nuevo Debian 11 de un Odoo15CE, con phyton 3.9.2
Restaure la BBDD V14 en el Odoo15 y puse la carpeta de filestore en /opt/odoo15/.local/share/Odoo/filestore/CAPEL_14
En un venv instale los requiremets y la libreria de openupgrade con el siguiente enlace
pip install git+https://github.com/OCA/openupgradelib.git@master#egg=openupgradelib
Configure el archivo .conf
Y estoy iniciando el servicio con el siguiente comando:
/opt/odoo15/odoo/venv/bin/python3 /opt/odoo15/odoo/odoo-bin -c odoo14_15.conf --database=CAPEL_14 --upgrade-path=/opt/odoo15/odoo/custom-addons/openupgrade_scripts/scripts --load=base,web,openupgrade_framework --update all --stop-after-init
La migracion Inicia y hace varias cosas antes de dar el fallo, si comento la linea que me da fallo sigue, pero mas adelante me empieza a dar fallos en los modulos originales diciendome el mismo fallo de que ERROR: invalid input syntax for type json.
Y si voy a los modulos originales y me pongo a comentar esas vistas que me da fallo pues va siguiendo la migracion pero estoy 99% seguro de que esto solo hace que se genere mas errores, y todo parte de una raiz que esta mal, que creo que es la del json.
Cualquier pista que me podais dar, o documentacion seria de gran ayuda y estaria muy agradecido.
Un saludo y gracias de antemano.