odoo-openupgrade-wizard/odoo_openupgrade_wizard/tools_postgres.py
2022-05-04 23:53:57 +02:00

53 lines
1.5 KiB
Python

from loguru import logger
from odoo_openupgrade_wizard.tools_docker import get_docker_client
def get_postgres_container():
client = get_docker_client()
return client.containers.list(filters={"name": "db"})[0]
def execute_sql_request(request, database="postgres"):
container = get_postgres_container()
docker_command = (
"psql --username=odoo --dbname={database} -t"
' -c "{request}"'.format(database=database, request=request)
)
logger.debug(
"Executing the following command in postgres container"
" on database %s \n %s" % (database, request)
)
docker_result = container.exec_run(docker_command)
if docker_result.exit_code != 0:
raise Exception(
"Request %s failed on database %s. Exit Code : %d"
% (request, database, docker_result.exit_code)
)
lines = docker_result.output.decode("utf-8").split("\n")
result = []
for line in lines:
if not line:
continue
result.append([x.strip() for x in line.split("|")])
return result
def ensure_database_exists(database: str):
"""
- Connect to postgres container.
- Check if the database exist.
- if not, create it.
"""
request = "select datname FROM pg_database WHERE datistemplate = false;"
result = execute_sql_request(request)
if [database] in result:
return
logger.info("Create database '%s' ..." % database)
request = "CREATE DATABASE {database} owner odoo;".format(
database=database
)
execute_sql_request(request)