[FIX] sql_db: ignore PG views when verifying table type
Collisions in table names of ORM models with built-in PG structures such as "attributes", "domains", "routines", "parameters", ... could occur and render the result of `table_kind` meaningless. Based on what was done via https://github.com/odoo/odoo/pull/16651 more than 2 years ago, it seems relying on our tables being in the 'public' schema is safe, even though it's only a default from PG. We reuse that same logic rather than the alternative of excluding ('information_schema', 'pg_catalog', ...), even though it looks safer at first. If we did the latter we'd have to change the other comparison for consistency, i.e. more risks. closes odoo/odoo#42358 X-original-commit: d8e74eb14990c82f65a44ffe163aa84159d6ccc4 Signed-off-by: Denis Vermylen <Icallhimtest@users.noreply.github.com>
This commit is contained in:
+7
-1
@@ -38,7 +38,13 @@ def table_kind(cr, tablename):
|
||||
``'f'`` (foreign table), ``'t'`` (temporary table),
|
||||
``'m'`` (materialized view), or ``None``.
|
||||
"""
|
||||
query = "SELECT relkind FROM pg_class WHERE relname = %s"
|
||||
query = """
|
||||
SELECT c.relkind
|
||||
FROM pg_class c
|
||||
JOIN pg_namespace n ON (n.oid = c.relnamespace)
|
||||
WHERE c.relname = %s
|
||||
AND n.nspname = 'public'
|
||||
"""
|
||||
cr.execute(query, (tablename,))
|
||||
return cr.fetchone()[0] if cr.rowcount else None
|
||||
|
||||
|
||||
Reference in New Issue
Block a user