Opened 2 years ago

Closed 2 years ago

#26535 closed Uncategorized (worksforme)

Possible bug - when migrating and removing unique constraint.

Reported by: jenlu Owned by: nobody
Component: Migrations Version: 1.9
Severity: Normal Keywords:
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Tim Graham)

Possible bug - when migrating and removing unique constraint.

Postgres 9.4.1 / 9.5.7 + Django 1.9.5 + psycopg 2.6.1

——

My setup is models/database representing sports events, and with competitors in different events.

Each competitor in different sports has for their model/class:

   class Meta:
       unique_together = ('event', 'number')

i.e. ensure a unique starting number in an event, now we are relaxing (removing this constraint)
this but having issues when migrating.

The above is represented in postgress as a UNIQUE constraint
and in all models.py the above constraint is as-above — but in pg it is represented as

(i) UNIQUE (event_id, number)

and sometimes as...

(ii) UNIQUE (number, event_id)

…and now when doing migration - for all tables where it is represented as (i) everything
goes well, but in tables where (ii) the following error:

 File "/Users/XXX/.virtualenvs/ssi195_2711/lib/python2.7/site-packages/django/db/migrations/migration.py", line 123, in apply
   operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
 File "/Users/XXX/.virtualenvs/ssi195_2711/lib/python2.7/site-packages/django/db/migrations/operations/models.py", line 359, in database_forwards
   getattr(new_model._meta, self.option_name, set()),
 File "/Users/XXX/.virtualenvs/ssi195_2711/lib/python2.7/site-packages/django/db/backends/base/schema.py", line 318, in alter_unique_together
   self._delete_composed_index(model, fields, {'unique': True}, self.sql_delete_unique)
 File "/Users/XXX/.virtualenvs/ssi195_2711/lib/python2.7/site-packages/django/db/backends/base/schema.py", line 347, in _delete_composed_index
   ", ".join(columns),
ValueError: Found wrong number (0) of constraints for match_ppc_ppccompetitor(event_id, number)

So seems to need to do some migrations manually and no biggie - but yet strange and unsure if Django or pg issue….

/ Jens

Change History (3)

comment:1 Changed 2 years ago by Tim Graham

Description: modified (diff)

Could you provide a sample project that reproduces the issue?

comment:2 Changed 2 years ago by jenlu

Hi, did some test but unable to reproduce in my ‘current’ setup - it always generates a
uniqueness constraint that can be removed.

Seems like my oldest models did generate one ordering in pg (UNIQUE(number, event_id)
whereas models added later on did generate the different ordering in pq (UNIQUE(event_id,
number) and this later have no problems to be removed/relaxed.

Not sure if under 1.7 or might have been even earlier that these models with this issue was added.

Workaround for me was just to DROP the constraint and add a new one with same arguments
but in different order..

/ Jens

Last edited 2 years ago by jenlu (previous) (diff)

comment:3 Changed 2 years ago by Tim Graham

Resolution: worksforme
Status: newclosed
Note: See TracTickets for help on using tickets.
Back to Top