From d6bf2131eec161cc88145558a69598d4e116cb30 Mon Sep 17 00:00:00 2001 From: Marc 'risson' Schmitt Date: Thu, 27 Nov 2025 14:28:55 +0100 Subject: [PATCH] packages/django-channels-postgres: fix notify size check (#18347) Signed-off-by: Marc 'risson' Schmitt --- ...ge_notify_new_channels_message_and_more.py | 36 +++++++++++++++++++ .../django_channels_postgres/models.py | 2 +- 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 packages/django-channels-postgres/django_channels_postgres/migrations/0002_remove_message_notify_new_channels_message_and_more.py diff --git a/packages/django-channels-postgres/django_channels_postgres/migrations/0002_remove_message_notify_new_channels_message_and_more.py b/packages/django-channels-postgres/django_channels_postgres/migrations/0002_remove_message_notify_new_channels_message_and_more.py new file mode 100644 index 0000000000..77485a83bc --- /dev/null +++ b/packages/django-channels-postgres/django_channels_postgres/migrations/0002_remove_message_notify_new_channels_message_and_more.py @@ -0,0 +1,36 @@ +# Generated by Django 5.2.8 on 2025-11-24 14:45 + +import pgtrigger.compiler +import pgtrigger.migrations +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("django_channels_postgres", "0001_initial"), + ] + + operations = [ + pgtrigger.migrations.RemoveTrigger( + model_name="message", + name="notify_new_channels_message", + ), + pgtrigger.migrations.AddTrigger( + model_name="message", + trigger=pgtrigger.compiler.Trigger( + name="notify_new_channels_message", + sql=pgtrigger.compiler.UpsertTriggerSql( + constraint="CONSTRAINT", + declare="DECLARE payload text; encoded_message text; epoch text;", + func="\n encoded_message := encode(NEW.message, 'base64');\n epoch := extract(epoch from NEW.expires)::text;\n IF octet_length(NEW.id::text) + octet_length(NEW.channel) + octet_length(epoch) + octet_length(encoded_message) + 3 < 8000 THEN\n payload := NEW.id::text || ':' || NEW.channel || ':' || epoch || ':' || encoded_message;\n ELSE\n payload := NEW.id::text || ':' || NEW.channel || ':' || epoch;\n END IF;\n\n PERFORM pg_notify('channels_messages', payload);\n RETURN NEW;\n ", + hash="b86d0cf8f8062d54ade9f5e8aad147aa0263a0e7", + operation="INSERT", + pgid="pgtrigger_notify_new_channels_message_d21ae", + table="django_channels_postgres_message", + timing="DEFERRABLE INITIALLY DEFERRED", + when="AFTER", + ), + ), + ), + ] diff --git a/packages/django-channels-postgres/django_channels_postgres/models.py b/packages/django-channels-postgres/django_channels_postgres/models.py index b38ed236b7..d9b3d645c0 100644 --- a/packages/django-channels-postgres/django_channels_postgres/models.py +++ b/packages/django-channels-postgres/django_channels_postgres/models.py @@ -77,7 +77,7 @@ class Message(models.Model): func=f""" encoded_message := encode(NEW.message, 'base64'); epoch := extract(epoch from NEW.expires)::text; - IF octet_length(NEW.id::text) + octet_length(NEW.channel) + octet_length(epoch) + octet_length(encoded_message) + 3 <= 8000 THEN + IF octet_length(NEW.id::text) + octet_length(NEW.channel) + octet_length(epoch) + octet_length(encoded_message) + 3 < 8000 THEN payload := NEW.id::text || ':' || NEW.channel || ':' || epoch || ':' || encoded_message; ELSE payload := NEW.id::text || ':' || NEW.channel || ':' || epoch;