Skip to content

Commit

Permalink
Fallback for db_exists when the pg_catalog is protected
Browse files Browse the repository at this point in the history
  • Loading branch information
sbidoul committed Jul 5, 2024
1 parent e83f595 commit fbb4e9a
Showing 1 changed file with 20 additions and 8 deletions.
28 changes: 20 additions & 8 deletions click_odoo/env_options.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from contextlib import closing

import click
import psycopg2.errors
from click.decorators import _param_memo # XXX undocumented click internal

from .compat import environment_manage
Expand Down Expand Up @@ -145,15 +146,26 @@ def _configure_odoo(self, ctx):
odoo.tools.config.parse_config(odoo_args)
odoo.cli.server.report_configuration()

def _can_connect_to_db(self, dbname):
try:
conn = odoo.sql_db.db_connect(dbname)
with closing(conn.cursor()):
return True
except Exception:
return False

def _db_exists(self, dbname):
conn = odoo.sql_db.db_connect("postgres")
with closing(conn.cursor()) as cr:
cr._obj.execute(
"SELECT datname FROM pg_catalog.pg_database "
"WHERE lower(datname) = lower(%s)",
(dbname,),
)
return bool(cr.fetchone())
try:
conn = odoo.sql_db.db_connect("postgres")
with closing(conn.cursor()) as cr:
cr._obj.execute(
"SELECT datname FROM pg_catalog.pg_database "
"WHERE lower(datname) = lower(%s)",
(dbname,),
)
return bool(cr.fetchone())
except psycopg2.errors.InsufficientPrivilege:
return self._can_connect_to_db(dbname)

def _pop_params(self, ctx):
ctx.params.pop("config", None)
Expand Down

0 comments on commit fbb4e9a

Please sign in to comment.