diff --git a/pkg/docker/entrypoint.sh b/pkg/docker/entrypoint.sh index 9fe5da0ba..a70e09d53 100755 --- a/pkg/docker/entrypoint.sh +++ b/pkg/docker/entrypoint.sh @@ -37,7 +37,13 @@ EOF done fi -if [ ! -f /var/lib/pgadmin/pgadmin4.db ]; then +# Check whether the external configuration database exists if it is being used. +external_config_db_exists="False" +if [ -n "${PGADMIN_CONFIG_CONFIG_DATABASE_URI}" ]; then + external_config_db_exists=$(cd /pgadmin4/pgadmin/utils && /venv/bin/python3 -c "from check_external_config_db import check_external_config_db; val = check_external_config_db(${PGADMIN_CONFIG_CONFIG_DATABASE_URI}); print(val)") +fi + +if [ ! -f /var/lib/pgadmin/pgadmin4.db ] && [ "${external_config_db_exists}" = "False" ]; then if [ -z "${PGADMIN_DEFAULT_EMAIL}" ] || { [ -z "${PGADMIN_DEFAULT_PASSWORD}" ] && [ -z "${PGADMIN_DEFAULT_PASSWORD_FILE}" ]; }; then echo 'You need to define the PGADMIN_DEFAULT_EMAIL and PGADMIN_DEFAULT_PASSWORD or PGADMIN_DEFAULT_PASSWORD_FILE environment variables.' exit 1 diff --git a/web/pgadmin/utils/check_external_config_db.py b/web/pgadmin/utils/check_external_config_db.py new file mode 100644 index 000000000..bd63b8ad5 --- /dev/null +++ b/web/pgadmin/utils/check_external_config_db.py @@ -0,0 +1,27 @@ +########################################################################## +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2024, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +########################################################################## + +from sqlalchemy import create_engine, inspect + + +def check_external_config_db(database_uri): + """ + Check if external config database exists if it + is being used. + """ + engine = create_engine(database_uri) + try: + connection = engine.connect() + if inspect(engine).has_table("server"): + return True + return False + except Exception: + return False + finally: + connection.close()