Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

django.db.utils.ProgrammingError: relation already exists

I'm trying to set up the tables for a new django project (that is, the tables do NOT already exist in the database); the django version is 1.7 and the db back end is PostgreSQL. The name of the project is crud. Results of migration attempt follow:

python manage.py makemigrations crud

Migrations for 'crud':   0001_initial.py:     - Create model AddressPoint     - Create model CrudPermission     - Create model CrudUser     - Create model LDAPGroup     - Create model LogEntry     - Add field ldap_groups to cruduser     - Alter unique_together for crudpermission (1 constraint(s)) 

python manage.py migrate crud

Operations to perform:   Apply all migrations: crud Running migrations:   Applying crud.0001_initial...Traceback (most recent call last):   File "manage.py", line 18, in <module>     execute_from_command_line(sys.argv)   File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 385, in execute_from_command_line     utility.execute()   File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 377, in execute     self.fetch_command(subcommand).run_from_argv(self.argv)   File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 288, in run_from_argv     self.execute(*args, **options.__dict__)   File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 338, in execute     output = self.handle(*args, **options)   File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/migrate.py", line 161, in handle     executor.migrate(targets, plan, fake=options.get("fake", False))   File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/executor.py", line 68, in migrate     self.apply_migration(migration, fake=fake)   File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/executor.py", line 102, in apply_migration     migration.apply(project_state, schema_editor)   File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/migration.py", line 108, in apply     operation.database_forwards(self.app_label, schema_editor, project_state, new_state)   File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/operations/models.py", line 36, in database_forwards     schema_editor.create_model(model)   File "/usr/local/lib/python2.7/dist-packages/django/db/backends/schema.py", line 262, in create_model     self.execute(sql, params)   File "/usr/local/lib/python2.7/dist-packages/django/db/backends/schema.py", line 103, in execute     cursor.execute(sql, params)   File "/usr/local/lib/python2.7/dist-packages/django/db/backends/utils.py", line 82, in execute     return super(CursorDebugWrapper, self).execute(sql, params)   File "/usr/local/lib/python2.7/dist-packages/django/db/backends/utils.py", line 66, in execute     return self.cursor.execute(sql, params)   File "/usr/local/lib/python2.7/dist-packages/django/db/utils.py", line 94, in __exit__     six.reraise(dj_exc_type, dj_exc_value, traceback)   File "/usr/local/lib/python2.7/dist-packages/django/db/backends/utils.py", line 66, in execute     return self.cursor.execute(sql, params) django.db.utils.ProgrammingError: relation "crud_crudpermission" already exists 

Some highlights from the migration file:

dependencies = [     ('auth', '0001_initial'),     ('contenttypes', '0001_initial'), ]     migrations.CreateModel(         name='CrudPermission',         fields=[             ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),             ('_created_by', models.CharField(default=b'', max_length=64, null=True, editable=False, blank=True)),             ('_last_updated_by', models.CharField(default=b'', max_length=64, null=True, editable=False, blank=True)),             ('_created', models.DateTimeField(null=True, editable=False, blank=True)),             ('_last_updated', models.DateTimeField(null=True, editable=False, blank=True)),             ('domain', models.CharField(max_length=32, choices=[(b'town', b'Town'), (b'boe', b'BOE'), (b'police', b'Police')])),             ('ldap_group', models.CharField(max_length=128, verbose_name=b'LDAP group')),             ('can_add', models.BooleanField(default=False, verbose_name=b'add')),             ('can_change', models.BooleanField(default=False, verbose_name=b'change')),             ('restrict_change_to_own', models.BooleanField(default=False)),             ('can_delete', models.BooleanField(default=False, verbose_name=b'delete')),             ('restrict_delete_to_own', models.BooleanField(default=False)),             ('models', models.ManyToManyField(to='contenttypes.ContentType', null=True, blank=True)),         ],         options={             'verbose_name': 'CRUD permission',         },         bases=(models.Model,),     ),     migrations.AlterUniqueTogether(         name='crudpermission',         unique_together=set([('ldap_group', 'can_add', 'can_change', 'can_delete', 'domain')]),     ) 

,

The crud app is not meant to actually do anything, but I use it another app, so when I try migrate from that app, I trigger the above problem.

I've found other examples on the web of people with similar issues, but none of their cases seem to apply because

  1. The problem affects an entire relation, not just one column
  2. I am not using multiple inheritance.

Where should I look next to find the underlying problem?

like image 529
quindraco Avatar asked Apr 23 '15 17:04

quindraco


People also ask

How do I reset Django migrations?

Reset the Whole Database in Djangosqlite3 and then delete all the migrations folders inside all the apps. After deleting the migrations folders, we can remake the migrations and migrate them using two commands; namely, python manage.py makemigrations and python manage.py migrate .


1 Answers

This works pretty fine

./manage.py migrate --fake default 

https://docs.djangoproject.com/en/2.2/ref/django-admin/#cmdoption-migrate-fake

like image 52
trex Avatar answered Oct 21 '22 00:10

trex