#29790: Release notes missing information about change in duplicate pk behavior
in
2.1
-------------------------------------+-------------------------------------
Reporter: Richard Ebeling | Owner: nobody
Type: Bug | Status: new
Component: Documentation | Version: 2.1
Severity: Normal | Resolution:
Keywords: multiple primary | Triage Stage:
keys migration id uuid | Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Richard Ebeling):
* cc: Richard Ebeling (added)
Old description:
> We migrated a model from a AutoField as id (default behaviour) to a
> UUIDField in the past, using a migration that looked like this with
> django 2.0:
> #28541
>
> There was a bug in SQLite though, which as of today only has the
> workaround listed in the bug tracker: #28541
>
> Thus, we ended up writing our migration like this: https://github.com
> /fsr-
> itse/EvaP/blob/master/evap/evaluation/migrations/0062_replace_textanswer_id_with_uuid.py
>
> When we try updating to django 2.1 now, this migration fails whenever you
> call migrate with the error
> {{{django.db.utils.ProgrammingError: multiple primary keys for table
> "evaluation_textanswer" are not allowed}}}
>
> This commit changed the behavior:
> 02365d3f38a64a5c2f3e932f23925a381d5bb151
>
> It works if we add a RemoveField instruction for the old id before
> setting {{{primary_key=True}}} on the new UUIDField. But this will
> trigger the SQLite bug listed above. Changing the old AutoField to
> {{{primary_key=False}}} where the RemoveField instruction would be
> doesn't fix the error.
>
> The documentation states that
> [https://docs.djangoproject.com/en/stable/ref/models/fields/#django.db.models.Field.primary_key
> an object may not have more than one primary key].
>
> Still, in the release notes for django 2.1 it should be noted that
> django's behavior was changed here. Also, I would appreciate if there was
> some kind of documentation on how you should migrate primary keys from a
> field to another if no two primary keys are allowed in between. There
> should be a way without squashing the migrations as we want to keep the
> history.
New description:
We migrated a model from a AutoField as id (default behaviour) to a
UUIDField in the past, using a migration that looked like this with django
2.0:
https://gist.github.com/smcoll/8bb867dc631433c01fd0
There was a bug in SQLite though, which as of today only has the
workaround listed in the bug tracker: #28541
Thus, we ended up writing our migration like this: https://github.com/fsr-
itse/EvaP/blob/master/evap/evaluation/migrations/0062_replace_textanswer_id_with_uuid.py
When we try updating to django 2.1 now, this migration fails whenever you
call migrate with the error
{{{django.db.utils.ProgrammingError: multiple primary keys for table
"evaluation_textanswer" are not allowed}}}
This commit changed the behavior: 02365d3f38a64a5c2f3e932f23925a381d5bb151
It works if we add a RemoveField instruction for the old id before setting
{{{primary_key=True}}} on the new UUIDField. But this will trigger the
SQLite bug listed above. Changing the old AutoField to
{{{primary_key=False}}} where the RemoveField instruction would be doesn't
fix the error.
The documentation states that
[https://docs.djangoproject.com/en/stable/ref/models/fields/#django.db.models.Field.primary_key
an object may not have more than one primary key].
Still, in the release notes for django 2.1 it should be noted that
django's behavior was changed here. Also, I would appreciate if there was
some kind of documentation on how you should migrate primary keys from a
field to another if no two primary keys are allowed in between. There
should be a way without squashing the migrations as we want to keep the
history.
--
--
Ticket URL: <https://code.djangoproject.com/ticket/29790#comment:4>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/066.bb15d395bb600790bc21780dda2251d8%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.