Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django/Postgres migration failing "django.db.utils.ProgrammingError: relation "django_site" does not exist"

Having issue migrating a Django 1.8.1 project

Operations to perform:
  Synchronize unmigrated apps: raven_contrib_django, staticfiles, found_dash, messages, allauth, humanize
  Apply all migrations: account, found_auth, sessions, admin, sites, auth, found_assets, contenttypes
Synchronizing apps without migrations:
  Creating tables...
    Creating table allauth_socialapp
    Creating table allauth_socialaccount
    Creating table allauth_socialtoken
    Running deferred SQL...
Raven is not configured (logging is disabled). Please see the documentation for more information.
Traceback (most recent call last):
  File "src/manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/found/env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line
    utility.execute()
  File "/found/env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 330, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/found/env/local/lib/python2.7/site-packages/django/core/management/base.py", line 390, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/found/env/local/lib/python2.7/site-packages/raven/contrib/django/management/__init__.py", line 41, in new_execute
    return original_func(self, *args, **kwargs)
  File "/found/env/local/lib/python2.7/site-packages/django/core/management/base.py", line 441, in execute
    output = self.handle(*args, **options)
  File "/found/env/local/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 179, in handle
    created_models = self.sync_apps(connection, executor.loader.unmigrated_apps)
  File "/found/env/local/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 317, in sync_apps
    cursor.execute(statement)
  File "/found/env/local/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
  File "/found/env/local/lib/python2.7/site-packages/django/db/utils.py", line 97, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/found/env/local/lib/python2.7/site-packages/django/db/backends/utils.py", line 62, in execute
    return self.cursor.execute(sql)
django.db.utils.ProgrammingError: relation "django_site" does not exist

It's complaining that django_site doesn't exist. Here's my app config:

INSTALLED_APPS = (
    'django.contrib.sites',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',...

The sites framework is included. This error only happens when using a Postgres database, SQLite databases work fine.

Database conf

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'found',
        'USER': 'found',
        'PASSWORD': 'xxx',
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}

Full configuration here.

./manage.py dbshell gets into the database fine:

(env)deploy@w1:/found$ src/manage.py dbshell
Password for user found: 
psql (9.3.6)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.

found=> \dt
             List of relations
 Schema |       Name        | Type  | Owner 
--------+-------------------+-------+-------
 public | django_migrations | table | found
(1 row)

found=> 

Running ./manage.py flush

(env)deploy@w1:/found$ src/manage.py flush
You have requested a flush of the database.
This will IRREVERSIBLY DESTROY all data currently in the 'found' database,
and return each table to an empty state.
Are you sure you want to do this?

    Type 'yes' to continue, or 'no' to cancel: yes
Traceback (most recent call last):
  File "src/manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/found/env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line
    utility.execute()
  File "/found/env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 330, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/found/env/local/lib/python2.7/site-packages/django/core/management/base.py", line 390, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/found/env/local/lib/python2.7/site-packages/django/core/management/base.py", line 441, in execute
    output = self.handle(*args, **options)
  File "/found/env/local/lib/python2.7/site-packages/django/core/management/commands/flush.py", line 84, in handle
    self.emit_post_migrate(verbosity, interactive, database)
  File "/found/env/local/lib/python2.7/site-packages/django/core/management/commands/flush.py", line 105, in emit_post_migrate
    emit_post_migrate_signal(set(all_models), verbosity, interactive, database)
  File "/found/env/local/lib/python2.7/site-packages/django/core/management/sql.py", line 280, in emit_post_migrate_signal
    using=db)
  File "/found/env/local/lib/python2.7/site-packages/django/dispatch/dispatcher.py", line 201, in send
    response = receiver(signal=self, sender=sender, **named)
  File "/found/env/local/lib/python2.7/site-packages/django/contrib/sites/management.py", line 20, in create_default_site
    if not Site.objects.using(using).exists():
  File "/found/env/local/lib/python2.7/site-packages/django/db/models/query.py", line 586, in exists
    return self.query.has_results(using=self.db)
  File "/found/env/local/lib/python2.7/site-packages/django/db/models/sql/query.py", line 479, in has_results
    return compiler.has_results()
  File "/found/env/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 808, in has_results
    return bool(self.execute_sql(SINGLE))
  File "/found/env/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 837, in execute_sql
    cursor.execute(sql, params)
  File "/found/env/local/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
  File "/found/env/local/lib/python2.7/site-packages/django/db/utils.py", line 97, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/found/env/local/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: relation "django_site" does not exist
LINE 1: SELECT (1) AS "a" FROM "django_site" LIMIT 1
like image 554
wjdp Avatar asked May 20 '15 17:05

wjdp


1 Answers

The problem is internal to Django. It doesn't take into account your app's dependency on django_site at the time of creating tables.

However, you can easily circumvent the problem creating a migration for the app whose dependency on django.contrib.sites is causing the error.

Solve this by:

src/manage.py makemigrations allauth

(Existing migrations will cause tables to be created at a later time and also perform dependency checks between migrated apps.)

like image 72
filip Avatar answered Nov 09 '22 13:11

filip