Odoo Error: psycopg2.errors.UniqueViolation: duplicate key value violates unique constraint

Un error insólito de Odoo con PostgreSQL y su solución

Ignacio Buioli
- 10/02/2020 - 2 min. de lectura

No importa cuanto uno sepa de Odoo, siempre habrá algún error nuevo que aprender. No me considero un experto ni nada, solo llevo un puñado de años usándolo, pero este es un error que a penas he visto en los foros y claramente no he encontrado en internet una solución que me sirviera. Así que dejo la mía.

Hace poco estaba instalando un Odoo, que debía llevar los típicos módulos de Ventas, Compras y Stock. Al instalar el módulo de Stock, en medio de la instalación, el server sufrió un problema relacionado con un DNS que estaba a medio configurar. La razón es indistinta, lo importante es que a mitad de la instalación el server se frenó unos segundos lo cual también frenó la instalación del módulo Stock. Al restablecerlo, cancelé la instalación de Stock, volví a darle a "Instalar" y este error salió en el log:

psycopg2.errors.UniqueViolation: duplicate key value violates unique constraint "stock_warehouse_warehouse_name_uniq" 
DETAIL: Key (name, company_id)=(Company, 1) already exists.

Claramente, se trata de un error relacionado con Postgres (eso indica el psycopg2). Pero no queda muy en claro que pasa, al parecer el módulo creó stock_warehouse_warehouse_name_uniq y tiene una restricción para crear otro. Ya que la instalación se detuvo en el medio, es posible que este error salga con otro campo, es indistinto también, lo importante es que Odoo entiende que Stock nunca se instaló, pero el sistema en si va a tener instaladas cosas de Invetario (como el menú), incluso los campos correspondientes en módulos como Ventas y Contactos. En definitiva, no podremos acceder a casi ninguna parte de nuestro Odoo porque hay un módulo instalado que en realidad no está instalado, por lo tanto no podemos ni actualizarlo ni desinstalarlo.

Solución

Es más sencillo de lo que el error en sí es. Lo primero es comprobar que ninguna dependencia del módulo se quedase "instalando", esto solo por las dudas. Una vez revisado eso, lo que vamos a hacer es identificar en el log que archivo XML es el que tiene el "unique constraint", para eso simplemente intentaremos instalar el módulo (en mi caso Stock) mientras revisamos el error en el log de Odoo. Nos va a identificar cual es la vista XML donde no puede seguir la instalación, en mi caso era data/stock_data.xml. Simplemente nos vamos al manifiesto del módulo y comentamos la linea en la declaración "data" que apunte a dicho archivo XML, esto hará que se lo "saltée" al momento de instalar. Ahora reiniciamos el server para que tome los cambios ¿Pero entonces no va a instalar el módulo de forma correcta? Claro que no, pero al menos lo va a instalar. Si nos dirigimos ahora a la parte de Aplicaciones, vamos al módulo problemático y le damos "Instalar". Lo más probable es que nos lo instale sin errores, aunque claro, no va a instalar dependencias ni nada, así que el Odoo seguirá con problemas y campos faltantes. En este caso la solución es muy simple, ya que ahora podremos desinstalar el módulo, vamos a desinstalarlo por completo del sistema. Luego nos vamos al manifiesto del módulo, lo dejamos como estaba antes, reiniciamos el server y hacemos una instalación limpia.

Problema resuelto.

Acerca de:

Ignacio Buioli

Licenciado en Artes Multimediales. Ha desarrollado numerosos proyectos de Multimedia así como también escrito artículos y traducido textos del mencionado tema. En Moldeo Interactive es Socio y Programador; encargándose, además, de gran parte de las redes y los cursos online.