Opened 9 years ago
Last modified 8 years ago
#25049 closed Bug
Oracle constraints case sensitivity — at Version 1
Reported by: | Pogsquog | Owned by: | nobody |
---|---|---|---|
Component: | Migrations | Version: | 1.8 |
Severity: | Normal | Keywords: | Oracle constraints migration case |
Cc: | Triage Stage: | Accepted | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
When using Oracle, migrations which alter the unique constraints of a model do not migrate correctly. This appears to be due to a case sensitivity difference in Oracle vs other databases.
Tested on Django 1.8 and 1.7 with Oracle 12c
example: models.py
from django.db import models class DoorCount(models.Model): Day = models.DateField() MinuteOfTheDay = models.PositiveIntegerField() DoorId = models.PositiveIntegerField(null=False, blank=False) LineId = models.PositiveIntegerField(null=False, blank=False, default=0) Count = models.PositiveIntegerField(default=0) class Meta: # unique_together = ("Day", "MinuteOfTheDay", "DoorId", "LineId") # migration initial 0001 unique_together = ("Day", "MinuteOfTheDay", "DoorId", "LineId") # migration 0002
run makemigration with initial
run makemigration with 0002
run migrate
gets "Found wrong number (0) of constraints for TestApp_doorcount(Day, MinuteOfTheDay, DoorId)"
Problem appears to be case sensitivity when looking for field names, so it does not find the relevant constraint in the database.
Currently I have a workaround to patch site-packages/django/db/schema.py with a .lower() on constraints, but this is very annoying for deploying, and is probably better fixed in the oracle specific code.