#36947: Changing db_comment / GeneratedField error
------------------------------+-----------------------------------------
     Reporter:  Alex Fischer  |                     Type:  Uncategorized
       Status:  new           |                Component:  Uncategorized
      Version:  6.0           |                 Severity:  Normal
     Keywords:                |             Triage Stage:  Unreviewed
    Has patch:  0             |      Needs documentation:  0
  Needs tests:  0             |  Patch needs improvement:  0
Easy pickings:  0             |                    UI/UX:  0
------------------------------+-----------------------------------------
 Django==5.2.11
 Postgres 16.2

 With this model definition:

 {{{
 class Foo(models.Model):
     foo = models.IntegerField()
     foo_copy = models.GeneratedField(
         expression=models.F("foo"),
         output_field=models.IntegerField(),
         db_persist=True,
     )
 }}}

 makemigrations and migrate run fine.

 Now add a db_comment to foo:
 {{{
 class Foo(models.Model):
     foo = models.IntegerField(db_comment="foo")
     foo_copy = models.GeneratedField(
         expression=models.F("foo"),
         output_field=models.IntegerField(),
         db_persist=True,
     )
 }}}

 Now  if we makemigrations and migrate again, we get the following error:
 {{{
 django.db.utils.NotSupportedError: cannot alter type of a column used by a
 generated column
 DETAIL:  Column "foo" is used by generated column "foo_copy".
 }}}

 Running sqlmigrate on the migration that was produced, we can see what the
 migration is trying to perform:
 {{{
 BEGIN;
 --
 -- Alter field foo on foo
 --
 ALTER TABLE "my_app_foo" ALTER COLUMN "foo" TYPE integer;
 COMMENT ON COLUMN "issue_tracker_foo"."foo" IS 'foo';
 COMMIT;
 }}}

 I don't know why it runs the first ALTER COLUMN statement. The ALTER
 COLUMN statement is a no-op most of the time, and that's fine. But in this
 case, it throws an error in Postgres ("cannot alter type of a column used
 by a generated column").
-- 
Ticket URL: <https://code.djangoproject.com/ticket/36947>
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 visit 
https://groups.google.com/d/msgid/django-updates/0107019c90d19625-1f2ca5d4-8d2f-482b-8dcc-8e013e41a976-000000%40eu-central-1.amazonses.com.

Reply via email to