mirror of
https://github.com/zulip/zulip.git
synced 2025-10-23 04:52:12 +00:00
Due to a bug[^1] in Django 4.2, fixed in 4.2.6, queries using `__isnull` added an unnecessary cast. This cast was _also_ used in `WHERE` clauses for partial indexes. This means that partial indexes created before Zulip was using Django 4.2 (i.e. before Zulip Server 7.0 or2c20028aa4
) will not be used when the server is using Django 4.2.0 through 4.2.5 -- and, conversely, that indexes created while Zulip had those versions of Django (i.e. Zulip Server 7.0 through 7.4 or7807bff526
) will not be used later. We re-create the indexes, to ensure that users that installed Zulip after Zulip Server 7.0 /2c20028aa4
and before Zulip Server 7.5 /7807bff526
have indexes which can be used by current Django. This is useless work for some installations, but most analytics tables are not large enough for this to take significant time. [^1]: https://code.djangoproject.com/ticket/34840
115 lines
4.2 KiB
Python
115 lines
4.2 KiB
Python
from django.db import migrations, models
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
dependencies = [
|
|
("analytics", "0016_unique_constraint_when_subgroup_null"),
|
|
]
|
|
|
|
# If the server was installed between 7.0 and 7.4 (or main between
|
|
# 2c20028aa451 and 7807bff52635), it contains indexes which (when
|
|
# running 7.5 or 7807bff52635 or higher) are never used, because
|
|
# they contain an improper cast
|
|
# (https://code.djangoproject.com/ticket/34840).
|
|
#
|
|
# We regenerate the indexes here, by dropping and re-creating
|
|
# them, so that we know that they are properly formed.
|
|
operations = [
|
|
migrations.RemoveConstraint(
|
|
model_name="installationcount",
|
|
name="unique_installation_count",
|
|
),
|
|
migrations.AddConstraint(
|
|
model_name="installationcount",
|
|
constraint=models.UniqueConstraint(
|
|
condition=models.Q(subgroup__isnull=False),
|
|
fields=("property", "subgroup", "end_time"),
|
|
name="unique_installation_count",
|
|
),
|
|
),
|
|
migrations.RemoveConstraint(
|
|
model_name="installationcount",
|
|
name="unique_installation_count_null_subgroup",
|
|
),
|
|
migrations.AddConstraint(
|
|
model_name="installationcount",
|
|
constraint=models.UniqueConstraint(
|
|
condition=models.Q(subgroup__isnull=True),
|
|
fields=("property", "end_time"),
|
|
name="unique_installation_count_null_subgroup",
|
|
),
|
|
),
|
|
migrations.RemoveConstraint(
|
|
model_name="realmcount",
|
|
name="unique_realm_count",
|
|
),
|
|
migrations.AddConstraint(
|
|
model_name="realmcount",
|
|
constraint=models.UniqueConstraint(
|
|
condition=models.Q(subgroup__isnull=False),
|
|
fields=("realm", "property", "subgroup", "end_time"),
|
|
name="unique_realm_count",
|
|
),
|
|
),
|
|
migrations.RemoveConstraint(
|
|
model_name="realmcount",
|
|
name="unique_realm_count_null_subgroup",
|
|
),
|
|
migrations.AddConstraint(
|
|
model_name="realmcount",
|
|
constraint=models.UniqueConstraint(
|
|
condition=models.Q(subgroup__isnull=True),
|
|
fields=("realm", "property", "end_time"),
|
|
name="unique_realm_count_null_subgroup",
|
|
),
|
|
),
|
|
migrations.RemoveConstraint(
|
|
model_name="streamcount",
|
|
name="unique_stream_count",
|
|
),
|
|
migrations.AddConstraint(
|
|
model_name="streamcount",
|
|
constraint=models.UniqueConstraint(
|
|
condition=models.Q(subgroup__isnull=False),
|
|
fields=("stream", "property", "subgroup", "end_time"),
|
|
name="unique_stream_count",
|
|
),
|
|
),
|
|
migrations.RemoveConstraint(
|
|
model_name="streamcount",
|
|
name="unique_stream_count_null_subgroup",
|
|
),
|
|
migrations.AddConstraint(
|
|
model_name="streamcount",
|
|
constraint=models.UniqueConstraint(
|
|
condition=models.Q(subgroup__isnull=True),
|
|
fields=("stream", "property", "end_time"),
|
|
name="unique_stream_count_null_subgroup",
|
|
),
|
|
),
|
|
migrations.RemoveConstraint(
|
|
model_name="usercount",
|
|
name="unique_user_count",
|
|
),
|
|
migrations.AddConstraint(
|
|
model_name="usercount",
|
|
constraint=models.UniqueConstraint(
|
|
condition=models.Q(subgroup__isnull=False),
|
|
fields=("user", "property", "subgroup", "end_time"),
|
|
name="unique_user_count",
|
|
),
|
|
),
|
|
migrations.RemoveConstraint(
|
|
model_name="usercount",
|
|
name="unique_user_count_null_subgroup",
|
|
),
|
|
migrations.AddConstraint(
|
|
model_name="usercount",
|
|
constraint=models.UniqueConstraint(
|
|
condition=models.Q(subgroup__isnull=True),
|
|
fields=("user", "property", "end_time"),
|
|
name="unique_user_count_null_subgroup",
|
|
),
|
|
),
|
|
]
|