summaryrefslogtreecommitdiff
path: root/odoo
diff options
context:
space:
mode:
authorAlvaro Fuentes <afu@odoo.com>2021-04-16 08:00:14 +0000
committerAlvaro Fuentes <afu@odoo.com>2021-05-18 17:01:08 +0000
commitb886722028c461b2d4f699d12174298c084c5bd1 (patch)
treeb3fb7af4eeeca4ecd20be89155f316cbd9a588e5 /odoo
parent9d6ef842902e9e192924fa0caba99514e1543352 (diff)
[FIX] base/ir_model: fix materialized views columns listing
When there is a materialized view that has not been populated any select on it will fail. Example of traceback: ``` Traceback (most recent call last): File "/home/odoo/src/odoo/12.0/odoo/service/server.py", line 1162, in preload_registries registry = Registry.new(dbname, update_module=update_module) File "/home/odoo/src/odoo/12.0/odoo/modules/registry.py", line 86, in new odoo.modules.load_modules(registry._db, force_demo, status, update_module) File "/home/odoo/src/odoo/12.0/odoo/modules/loading.py", line 367, in load_modules registry.setup_models(cr) File "/home/odoo/src/odoo/12.0/odoo/modules/registry.py", line 262, in setup_models env['ir.model']._add_manual_models() File "/home/odoo/src/odoo/12.0/odoo/addons/base/models/ir_model.py", line 321, in _add_manual_models cr.execute('SELECT * FROM %s LIMIT 0' % Model._table) File "/home/odoo/src/odoo/12.0/odoo/sql_db.py", line 148, in wrapper return f(self, *args, **kwargs) File "/home/odoo/src/odoo/12.0/odoo/sql_db.py", line 225, in execute res = self._obj.execute(query, params) psycopg2.errors.ObjectNotInPrerequisiteState: materialized view "x_bi_sql_view_report_copy" has not been populated HINT: Use the REFRESH MATERIALIZED VIEW command. ``` Several upgrade requests have or had had this error which has been solved with specific scripts. Related to #40930 closes odoo/odoo#71002 X-original-commit: b208570ce8399bc6d3e4a8ba02eef6558e0a6ccc Signed-off-by: Raphael Collet (rco) <rco@openerp.com>
Diffstat (limited to 'odoo')
-rw-r--r--odoo/addons/base/models/ir_model.py14
1 files changed, 12 insertions, 2 deletions
diff --git a/odoo/addons/base/models/ir_model.py b/odoo/addons/base/models/ir_model.py
index 2e5842ad717..01229307ef7 100644
--- a/odoo/addons/base/models/ir_model.py
+++ b/odoo/addons/base/models/ir_model.py
@@ -430,8 +430,18 @@ class IrModel(models.Model):
if tools.table_kind(cr, Model._table) not in ('r', None):
# not a regular table, so disable schema upgrades
Model._auto = False
- cr.execute('SELECT * FROM %s LIMIT 0' % Model._table)
- columns = {desc[0] for desc in cr.description}
+ cr.execute(
+ '''
+ SELECT a.attname
+ FROM pg_attribute a
+ JOIN pg_class t
+ ON a.attrelid = t.oid
+ AND t.relname = %s
+ WHERE a.attnum > 0 -- skip system columns
+ ''',
+ [Model._table]
+ )
+ columns = {colinfo[0] for colinfo in cr.fetchall()}
Model._log_access = set(models.LOG_ACCESS_COLUMNS) <= columns