#35047: Wrong sql query for migration
----------------------------+--------------------------------------
     Reporter:  mgoldenbe   |                    Owner:  nobody
         Type:  Bug         |                   Status:  new
    Component:  Migrations  |                  Version:  3.2
     Severity:  Normal      |               Resolution:
     Keywords:  sqlmigrate  |             Triage Stage:  Unreviewed
    Has patch:  0           |      Needs documentation:  0
  Needs tests:  0           |  Patch needs improvement:  0
Easy pickings:  0           |                    UI/UX:  0
----------------------------+--------------------------------------
Description changed by mgoldenbe:

Old description:

> I had the model:
>
> ```py
> class UserInfo(models.Model):
>     user = models.ForeignKey(User, related_name='user_info',
> on_delete=CASCADE)
>     picture = models.URLField(null = True, blank = True)
>     paying = models.BooleanField(default = False)
>     credits = models.DecimalField(max_digits=6, decimal_places=2)
>     expiry = models.DateTimeField()
>     usd_per_credit = models.FloatField(null = True, blank = True)
>     content_count = models.IntegerField(default=0)
>     suspended = models.BooleanField(default = False)
>     suspended_request = models.TextField(null = True, blank = True)
>     suspended_timestamp = models.DateTimeField(null = True, blank = True)
>
>     def __str__(self): return str(self.user)
> ```
>
> Then I changed the `usd_per_credit` field to be
> ```
>     usd_per_credit = models.FloatField(default = 0.00)
> ```
>
> After running `makemigrations` and `migrate`, I ran `sqlmigrate` and got
> the following:
> ```sql
> BEGIN;
> --
> -- Alter field usd_per_credit on userinfo
> --
> ALTER TABLE "accounts_userinfo" ALTER COLUMN "usd_per_credit" SET DEFAULT
> 0.0;
> UPDATE "accounts_userinfo" SET "usd_per_credit" = 0.0 WHERE
> "usd_per_credit" IS NULL;
> ALTER TABLE "accounts_userinfo" ALTER COLUMN "usd_per_credit" SET NOT
> NULL;
> ALTER TABLE "accounts_userinfo" ALTER COLUMN "usd_per_credit" DROP
> DEFAULT;
> COMMIT;
> ```
>
> The last line before COMMIT is wrong. It drops the default value which
> was correctly set.

New description:

 I had the model:


 {{{
 class UserInfo(models.Model):
     user = models.ForeignKey(User, related_name='user_info',
 on_delete=CASCADE)
     picture = models.URLField(null = True, blank = True)
     paying = models.BooleanField(default = False)
     credits = models.DecimalField(max_digits=6, decimal_places=2)
     expiry = models.DateTimeField()
     usd_per_credit = models.FloatField(null = True, blank = True)
     content_count = models.IntegerField(default=0)
     suspended = models.BooleanField(default = False)
     suspended_request = models.TextField(null = True, blank = True)
     suspended_timestamp = models.DateTimeField(null = True, blank = True)

     def __str__(self): return str(self.user)
 }}}


 Then I changed the `usd_per_credit` field to be

 {{{
     usd_per_credit = models.FloatField(default = 0.00)
 }}}


 After running `makemigrations` and `migrate`, I ran `sqlmigrate` and got
 the following:

 {{{
 BEGIN;
 --
 -- Alter field usd_per_credit on userinfo
 --
 ALTER TABLE "accounts_userinfo" ALTER COLUMN "usd_per_credit" SET DEFAULT
 0.0;
 UPDATE "accounts_userinfo" SET "usd_per_credit" = 0.0 WHERE
 "usd_per_credit" IS NULL;
 ALTER TABLE "accounts_userinfo" ALTER COLUMN "usd_per_credit" SET NOT
 NULL;
 ALTER TABLE "accounts_userinfo" ALTER COLUMN "usd_per_credit" DROP
 DEFAULT;
 COMMIT;
 }}}

 The last line before COMMIT is wrong. It drops the default value which was
 correctly set.

--

-- 
Ticket URL: <https://code.djangoproject.com/ticket/35047#comment:1>
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/0107018c7cac0571-63f7276a-dd78-4c67-a334-990701b16bc2-000000%40eu-central-1.amazonses.com.

Reply via email to