[Fixed]-Django / postgres setup for database creation, for running tests

17👍

Django will use the same connection settings as in your settings.py for tests, but will use a different database (by default, test_mydb where your regular database is mydb).

You can change the django user permissions to create databases in the psql shell. See this related answer for more info.

=> ALTER USER myuser CREATEDB;

I don’t know whether it’s possible to restrict the permission so that the django user can only create the database test_mydb.

4👍

As of 2020 a superior option to giving Django the ability to create databases per other answers is just to use the --keepdb flag when running your tests:

$ ./manage.py test --keepdb

This will keep the same db around between runs, which is much faster and doesn’t require giving your django user CREATEDB permissions. More details here.

As @Alasdair previously noted, Django will use the same settings as your normal database by default but attempt to connect to or create a db at test_<your-database-name>. You can also customize the test DB’s name with the TEST dict in your DATABASE settings.

0👍

For production, I faced error when executing the accepted answer solution.
Something like this:

django.db.utils.OperationalError: cannot drop the currently open database

For me, according to this link, I need to do:

ALTER USER <your_user> CREATEDB;
CREATE DATABASE postgres;

It needs to be postgres for the test to work without raising
django.db.utils.OperationalError

Leave a comment