#36107: PostgresSQL ArrayField with size crashes with bulk_create
-------------------------------------+-------------------------------------
     Reporter:  Claude Paroz         |                     Type:  Bug
       Status:  new                  |                Component:  Database
                                     |  layer (models, ORM)
      Version:  5.2                  |                 Severity:  Release
                                     |  blocker
     Keywords:                       |             Triage Stage:
                                     |  Unreviewed
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
 When trying to `bulk_create` model instances with an ArrayField with a
 specified `size` (and triggering the UNNEST instruction), the query
 crashes at database level (column "<field>" is of type double precision[]
 but expression is of type double precision).

 Probably a regression in a16eedcf9c69d8a11d94cac1811018c5b996d491

 A possible reproducing test:
 {{{
 diff --git a/tests/postgres_tests/migrations/0002_create_test_models.py
 b/tests/postgres_tests/migrations/0002_create_test_models.py
 index 188f79607d..31705ae21a 100644
 --- a/tests/postgres_tests/migrations/0002_create_test_models.py
 +++ b/tests/postgres_tests/migrations/0002_create_test_models.py
 @@ -167,6 +167,28 @@ class Migration(migrations.Migration):
              },
              bases=(models.Model,),
          ),
 +        migrations.CreateModel(
 +            name="WithSizeArrayModel",
 +            fields=[
 +                (
 +                    "id",
 +                    models.AutoField(
 +                        verbose_name="ID",
 +                        serialize=False,
 +                        auto_created=True,
 +                        primary_key=True,
 +                    ),
 +                ),
 +                (
 +                    "field",
 +                    ArrayField(models.FloatField(), size=2, null=True,
 blank=True),
 +                ),
 +            ],
 +            options={
 +                "required_db_vendor": "postgresql",
 +            },
 +            bases=(models.Model,),
 +        ),
          migrations.CreateModel(
              name="NullableIntegerArrayModel",
              fields=[
 diff --git a/tests/postgres_tests/models.py
 b/tests/postgres_tests/models.py
 index e3118bc590..1563f6a35d 100644
 --- a/tests/postgres_tests/models.py
 +++ b/tests/postgres_tests/models.py
 @@ -64,6 +64,10 @@ class DateTimeArrayModel(PostgreSQLModel):
      times = ArrayField(models.TimeField())


 +class WithSizeArrayModel(PostgreSQLModel):
 +    field = ArrayField(models.FloatField(), size=3)
 +
 +
  class NestedIntegerArrayModel(PostgreSQLModel):
      field = ArrayField(ArrayField(models.IntegerField()))

 diff --git a/tests/postgres_tests/test_array.py
 b/tests/postgres_tests/test_array.py
 index d930a01a1d..c2b0ebcd31 100644
 --- a/tests/postgres_tests/test_array.py
 +++ b/tests/postgres_tests/test_array.py
 @@ -28,6 +28,7 @@ from .models import (
      OtherTypesArrayModel,
      PostgreSQLModel,
      Tag,
 +    WithSizeArrayModel,
  )

  try:
 @@ -216,6 +217,12 @@ class TestQuerying(PostgreSQLTestCase):
              ]
          )

 +    def test_bulk_create_with_sized_arrayfield(self):
 +        WithSizeArrayModel.objects.bulk_create([
 +            WithSizeArrayModel(field=[1, 2]),
 +            WithSizeArrayModel(field=[3, 4]),
 +        ])
 +
      def test_empty_list(self):
          NullableIntegerArrayModel.objects.create(field=[])
          obj = (
 }}}
-- 
Ticket URL: <https://code.djangoproject.com/ticket/36107>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/django-updates/01070194752cee5e-92281592-6dc3-4746-a5d7-78fa63c2061a-000000%40eu-central-1.amazonses.com.

Reply via email to