#27808 closed Bug (fixed)
Nested ArrayField with nullable base field generates invalid SQL
| Reported by: | Josef Kolář | Owned by: | Hasan Ramezani | 
|---|---|---|---|
| Component: | contrib.postgres | Version: | dev | 
| 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 )
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 (10)
comment:1 by , 9 years ago
| Description: | modified (diff) | 
|---|
comment:2 by , 9 years ago
| Description: | modified (diff) | 
|---|
comment:3 by , 9 years ago
| Description: | modified (diff) | 
|---|
comment:4 by , 9 years ago
| Version: | 1.9 → master | 
|---|
comment:5 by , 9 years ago
| Triage Stage: | Unreviewed → Accepted | 
|---|
comment:6 by , 9 years ago
This is due to following bug in psycopg2 https://github.com/psycopg/psycopg2/issues/325
comment:7 by , 6 years ago
| Has patch: | set | 
|---|---|
| Owner: | set to | 
| Status: | new → assigned | 
Seems bug was fixed in psycopg2. I just added a test case to prove it.
comment:9 by , 6 years ago
| Has patch: | unset | 
|---|---|
| Resolution: | → fixed | 
| Status: | assigned → closed | 
  Note:
 See   TracTickets
 for help on using tickets.
    
Not sure if it's a duplicate but it looks related to #24726 at least.