#36947 new Uncategorized

Changing db_comment / GeneratedField error

Reported by: Alex Fischer Owned by:
Component: Uncategorized Version: 6.0
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

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").

Change History (0)

Note: See TracTickets for help on using tickets.
Back to Top