Opened 12 months ago

Last modified 10 months ago

#27808 new Bug

Nested ArrayField with nullable base field generates invalid SQL

Reported by: Josef Kolář Owned by:
Component: contrib.postgres Version: master
Severity: Normal Keywords:
Cc: Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Josef Kolář)

When I have model

class NestedNullableIntegerArrayModel(PostgreSQLModel):
    field = ArrayField(ArrayField(models.IntegerField(null=True)))

and trying to save data

NestedNullableIntegerArrayModel(field=[[None, None], [None, None]]).save()

Django generates

INSERT INTO "postgres_tests_nestednullableintegerarraymodel" ("field") VALUES (%s) RETURNING "postgres_tests_nestednullableintegerarraymodel"."id"

with expectable params

([[None, None], [None, None]], )

but this query fails in postgres on

ERROR:  column "field" is of type integer[] but expression is of type text[]
LINE 1: ...estednullableintegerarraymodel" ("field") VALUES (ARRAY['{NU...
                                                             ^
HINT:  You will need to rewrite or cast the expression.

But, if I use one of values is not None, model is saved successfully:

NestedNullableIntegerArrayModel(field=[[None, None], [None, 42]]).save()

Is it a problem of Django or I should find problem in psycopg?

Change History (6)

comment:1 Changed 12 months ago by Josef Kolář

Description: modified (diff)

comment:2 Changed 12 months ago by Josef Kolář

Description: modified (diff)

comment:3 Changed 12 months ago by Josef Kolář

Description: modified (diff)

comment:4 Changed 12 months ago by Simon Charette

Version: 1.9master

Not sure if it's a duplicate but it looks related to #24726 at least.

comment:5 Changed 12 months ago by Tim Graham

Triage Stage: UnreviewedAccepted

comment:6 Changed 10 months ago by Marcus Gregersen

This is due to following bug in psycopg2 https://github.com/psycopg/psycopg2/issues/325

Note: See TracTickets for help on using tickets.
Back to Top