Opened 3 years ago

Closed 3 years ago

#29171 closed Bug (worksforme)

PostgreSQL specific model fields - ArrayField: Type Mismatch

Reported by: Pal Owned by: nobody
Component: Database layer (models, ORM) Version: 2.0
Severity: Normal Keywords: Postgres Array Query
Cc: Mariusz Felisiak Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

When you define ArrayField as models.CharField, the query fails. But if you define ArrayField as models.TextField, the query succeeds.

Not Working: ArrayField(models.CharField(max_length=200), blank=True)

Working: ArrayField(models.TextField(blank=True))

Change History (8)

comment:1 Changed 3 years ago by Pal

Type: UncategorizedBug

comment:2 Changed 3 years ago by Simon Charette

Could you provide a traceback and more details about how it fails?

Does it happen when you define a model using ArrayField(CharField()), when performing a query annotation?

comment:3 in reply to:  2 Changed 3 years ago by Pal

Replying to Simon Charette:

Could you provide a traceback and more details about how it fails?

Does it happen when you define a model using ArrayField(CharField()), when performing a query annotation?

Yes. When I defined the model as shown in the documentation at https://docs.djangoproject.com/en/2.0/ref/contrib/postgres/fields/#querying-arrayfield , the query fails. But if I change models.CharField to models.TextField, the query succeeds.

Here are the error statements from apache2 error log:
psycopg2.ProgrammingError: operator does not exist: text[] @> character varying[]
django.db.utils.ProgrammingError: operator does not exist: text[] @> character varying[]

May be we need to change the documentation to reflect the change above. Thanks.

comment:4 Changed 3 years ago by Mariusz Felisiak

Cc: Mariusz Felisiak added

comment:5 Changed 3 years ago by Tim Graham

Please show the model and the query. Perhaps you could write it as a test for tests/postgres_tests/test_array.py using CharArrayModel.

comment:6 in reply to:  5 Changed 3 years ago by Pal

Replying to Tim Graham:

Please show the model and the query. Perhaps you could write it as a test for tests/postgres_tests/test_array.py using CharArrayModel.

One thing I want to mention is that this table was already created in Postgres and I am adding that to the models.py. As I said, if I define as ArrayField(models.CharField...), query does not work where as ArrayField(models.TextField...) works. So someone can test and verify this. Thanks.

Last edited 3 years ago by Pal (previous) (diff)

comment:7 Changed 3 years ago by Tim Graham

I'm still not sure we have enough details to reproduce the issue. What does the SQL for the table look like, what does your model look like, and what does the failing QuerySet look like?

comment:8 Changed 3 years ago by Pal

Resolution: worksforme
Status: newclosed
Note: See TracTickets for help on using tickets.
Back to Top