Opened 3 weeks ago
Last modified 2 weeks ago
#36947 assigned Bug
Changing a field's db_comment unnecessarily alters column type
| Reported by: | Alex Fischer | Owned by: | Clifford Gama |
|---|---|---|---|
| Component: | Migrations | Version: | 6.0 |
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Accepted | |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description (last modified by )
(On databases that support altering the comment independently of the type.)
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 (3)
comment:1 by , 3 weeks ago
| Component: | Uncategorized → Migrations |
|---|---|
| Owner: | set to |
| Status: | new → assigned |
| Triage Stage: | Unreviewed → Accepted |
| Type: | Uncategorized → Bug |
comment:2 by , 2 weeks ago
| Description: | modified (diff) |
|---|---|
| Summary: | Changing db_comment / GeneratedField error → Changing a field's db_comment unnecessarily alters column type |
comment:3 by , 2 weeks ago
| Has patch: | set |
|---|
Thanks for the ticket. I don't think we should be altering the column type when it hasn't changed. I'll investigate a fix.