All blogs
    DockerPostgreSQL

    Accessing the PostgreSQL Command Line in Docker

    May 22, 20245 min read
    Accessing the PostgreSQL Command Line in Docker

    When working with a Django application using Docker, you might find yourself needing to access the PostgreSQL command line. There are a couple of ways to do this, but it’s not always straightforward. Here’s a guide to help you navigate the process and avoid common pitfalls.

    Using python manage.py dbshell#

    Django provides a convenient command to access the database shell via python manage.py dbshell. This command automatically runs the appropriate command-line client for your database engine:

    For PostgreSQL, it runs psql.

    For MySQL, it runs mysql.

    For SQLite, it runs sqlite3.

    For Oracle, it runs sqlplus.

    Let's try using this command in our Docker setup:

    Bash
    sudo docker-compose exec web python manage.py dbshell

    Common Issue: CommandError#

    If you encounter the following error:

    VBNET
    CommandError: You appear not to have the 'psql' program installed or on your path.

    This happens because psql is not installed in the web container, which is where your Django application is running. Instead of installing psql in the web container, we can directly access psql from the PostgreSQL container.

    Directly Running psql from the PostgreSQL Container#

    Connect to PostgreSQL:

    Bash
    sudo docker-compose exec db psql

    If you get an error like:

    VBNET
    psql: error: could not connect to server: FATAL:  role "root" does not exist

    This indicates that psql is trying to connect using the root user, which doesn’t exist by default. To fix this, we need to use the correct user credentials.

    Specify the User

    Use the -U flag to specify the PostgreSQL user:

    Bash
    sudo docker-compose exec db psql -U postgres

    You should now see the psql prompt:

    Bash
    postgres=#

    If you encounter an error like:

    Bash
    psql: error: FATAL:  database "postgres" does not exist

    it means you need to specify both the database name and the username.

    Specify Database and User

    Use the -d flag to specify the database, and the -U flag to specify the user

    Bash
    sudo docker-compose exec db psql -d your_database -U your_username

    Replace your_database and your_username with the actual database name and username from your .env file. For example, if your .env file has:

    Bash
    POSTGRES_DB=mydb
    POSTGRES_USER=myuser
    POSTGRES_PASSWORD=mypassword

    Then your command should be:

    Bash
    sudo docker-compose exec db psql -d mydb -U myuser
    Thanks for reading!
    More bite-sized engineering notes are waiting on the blog.

    © 2026 Arpan Pokharel