diff --git a/zerver/migrations/0742_usermessage_zerver_usermessage_is_private_unread_message_id.py b/zerver/migrations/0742_usermessage_zerver_usermessage_is_private_unread_message_id.py new file mode 100644 index 0000000000..4561718db1 --- /dev/null +++ b/zerver/migrations/0742_usermessage_zerver_usermessage_is_private_unread_message_id.py @@ -0,0 +1,22 @@ +from django.contrib.postgres.operations import AddIndexConcurrently +from django.db import migrations, models + + +class Migration(migrations.Migration): + atomic = False + dependencies = [ + ("zerver", "0741_pushdevice_zerver_pushdevice_user_bouncer_device_id_idx"), + ] + + operations = [ + AddIndexConcurrently( + model_name="usermessage", + index=models.Index( + models.F("user_profile"), + models.F("message"), + condition=models.Q(("flags__andnz", 2048), ("flags__andz", 1)), + name="zerver_usermessage_is_private_unread_message_id", + ), + ), + migrations.RunSQL("ANALYZE zerver_usermessage"), + ] diff --git a/zerver/models/messages.py b/zerver/models/messages.py index 4dd9b577d5..65a4e3b160 100644 --- a/zerver/models/messages.py +++ b/zerver/models/messages.py @@ -636,6 +636,15 @@ class UserMessage(AbstractUserMessage): condition=Q(flags__andnz=AbstractUserMessage.flags.is_private.mask), name="zerver_usermessage_is_private_message_id", ), + models.Index( + "user_profile", + "message", + condition=( + Q(flags__andnz=AbstractUserMessage.flags.is_private.mask) + & Q(flags__andz=AbstractUserMessage.flags.read.mask) + ), + name="zerver_usermessage_is_private_unread_message_id", + ), models.Index( "user_profile", "message",