What my settings.py for DB looks like: ALLOWED_HOSTS = ['*'] DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'fishercoder', 'USER': 'fishercoderuser', 'PASSWORD': 'password', 'HOST': 'localhost', 'PORT': '5432', } } I have created a new and empty db named "fishercoder" this way: psql -U postgres create database fishercoder; ALTER USER postgres with password 'badpassword!'; CREATE USER fishercoderuser WITH PASSWORD 'password'; ALTER ROLE fishercoderuser SET client_encoding TO 'utf8'; ALTER ROLE fishercoderuser SET default_transaction_isolation TO 'read committed'; ALTER ROLE fishercoderuser SET timezone TO 'PST8PDT'; GRANT ALL PRIVILEGES ON DATABASE fishercoder TO fishercoderuser; Then I've imported my other SQL dump into this new DB successfully by runningsql -U postgres fishercoder < fishercoder_dump.sql Then I tried to run ./manage.py makemigrations on my Django project on this EC2 instance, but got this error: Traceback (most recent call last): File "/home/ubuntu/myprojectdir/myprojectenv/lib/python3.6/site-packages/django/db/backends/utils.py", line 86, in _execute return self.cursor.execute(sql, params) psycopg2.errors.InsufficientPrivilege: permission denied for relation django_migrations I found these three related posts on SO: One, two and three I tried the commands they suggested: postgres=# GRANT ALL ON ALL TABLES IN SCHEMA public to fishercoderuser; GRANT postgres=# GRANT ALL ON ALL SEQUENCES IN SCHEMA public to fishercoderuser; GRANT postgres=# GRANT ALL ON ALL FUNCTIONS IN SCHEMA public to fishercoderuser; GRANT no luck, I then restarted my postgresql db: sudo service postgresql restart when I tried to run migrations again, still faced w/ the same error. More debug info below: ubuntu@ip-xxx-xxx-xx-xx:~$ psql -U postgres Password for user postgres: psql (10.12 (Ubuntu 10.12-0ubuntu0.18.04.1)) Type "help" for help. postgres=# \dt django_migrations Did not find any relation named "django_migrations". postgres=# \d django_migrations Did not find any relation named "django_migrations". postgres=# \dp django_migrations Access privileges Schema | Name | Type | Access privileges | Column privileges | Policies --------+------+------+-------------------+-------------------+---------- (0 rows) postgres=# SHOW search_path; \dt *.django_migrations search_path ----------------- "$user", public (1 row) Did not find any relation named "*.django_migrations". postgres=# \dn+ public. List of schemas Name | Owner | Access privileges | Description --------------------+----------+----------------------+---------------------------------- information_schema | postgres | postgres=UC/postgres+| | | =U/postgres | pg_catalog | postgres | postgres=UC/postgres+| system catalog schema | | =U/postgres | pg_temp_1 | postgres | | pg_toast | postgres | | reserved schema for TOAST tables pg_toast_temp_1 | postgres | | public | postgres | postgres=UC/postgres+| standard public schema | | =UC/postgres | (6 rows) Any ideas how to fix this? Continue reading...