pythonsqlalchemyfastapidockerpy

Error when try run the command: alembic revision --autogenerate -m "description"


I have an aplication with two containers, one of then has my database. When i try run the alembic command alembic revision --autogenerate -m "create cases table" to update migrations i'm getting the following error:

sqlalchemy.exc.OperationalError: (psycopg.OperationalError) [Errno -3] Temporary failure in name resolution
(Background on this error at: https://sqlalche.me/e/20/e3q8)

In the file alembic.ini the variable sqlalchemy.url is configured to get the database url through environment variable.

file env.py

config.set_main_option('sqlalchemy.url', Settings().DATABASE_URL)

file .env

DATABASE_URL=postgresql+psycopg://app_user:app_password@giatros_db:5432/app_db
POSTGRES_USER=app_user
POSTGRES_DB=app_db
POSTGRES_PASSWORD=app_password

I need understand why is this error occuring and help to find a solution.


Solution

  • You might be running the alembic command from a local terminal.

    In the env file, it is mentioned that the database is available at giatros_db. But when running locally, giatros_db is not resolved.

    This can be fixed by:

    1. overriding the DATABASE_URL before running the alembic command:

      export DATABASE_URL="postgresql+psycopg://app_user:app_password@localhost:5432/app_db"
      alembic revision --autogenerate -m "create cases table"
      

      or override for the command

      DATABASE_URL="postgresql+psycopg://app_user:app_password@localhost:5432/app_db" alembic revision --autogenerate -m "create cases table"
      
    2. running the alembic command inside the container

      docker exec -it <container_name_or_id> alembic revision --autogenerate -m "create cases table"
      

    Notice that the server name in the DATABASE_URL has been changed from giatros_db to localhost.