diff --git a/odoo/addons/base/models/ir_translation.py b/odoo/addons/base/models/ir_translation.py index 44b120b6d33..57a128056b3 100644 --- a/odoo/addons/base/models/ir_translation.py +++ b/odoo/addons/base/models/ir_translation.py @@ -261,7 +261,8 @@ class IrTranslation(models.Model): res = super(IrTranslation, self)._auto_init() # Add separate md5 index on src (no size limit on values, and good performance). tools.create_index(self._cr, 'ir_translation_src_md5', self._table, ['md5(src)']) - tools.create_index(self._cr, 'ir_translation_ltn', self._table, ['name', 'lang', 'type']) + tools.create_unique_index(self._cr, 'ir_translation_unique', self._table, + ['type', 'name', 'lang', 'res_id', 'md5(src)']) return res @api.model diff --git a/odoo/models.py b/odoo/models.py index bf864fe3bd1..bd1fc1b415b 100644 --- a/odoo/models.py +++ b/odoo/models.py @@ -3541,16 +3541,15 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})): # The parenthesis surrounding the select are important, as this is a sub-select. # The quotes surrounding `ir_translation` are important as well. unique_translation_subselect = """ - (SELECT DISTINCT ON (res_id) res_id, value - FROM "ir_translation" - WHERE name=%s AND lang=%s AND value!=%s + (SELECT res_id, value FROM "ir_translation" + WHERE name=%s AND lang=%s AND value!='' ORDER BY res_id, id DESC) """ alias, alias_statement = query.add_join( (table_alias, unique_translation_subselect, 'id', 'res_id', field), implicit=False, outer=True, - extra_params=["%s,%s" % (self._name, field), self.env.lang, ""], + extra_params=["%s,%s" % (self._name, field), self.env.lang], ) return 'COALESCE("%s"."%s", "%s"."%s")' % (alias, 'value', table_alias, field) else: