[Django] #35311: Addindex operation generates wrong sql code for Postgresql GinIndex

16 views
Skip to first unread message

Django

unread,
Mar 16, 2024, 4:33:03 AM3/16/24
to django-...@googlegroups.com
#35311: Addindex operation generates wrong sql code for Postgresql GinIndex
-------------------------------------+-------------------------------------
Reporter: Pierre | Owner: nobody
Juhen |
Type: Bug | Status: new
Component: Database | Version: 5.0
layer (models, ORM) | Keywords: postgresql
Severity: Normal | migration
Triage Stage: | Has patch: 0
Unreviewed |
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-------------------------------------+-------------------------------------
Hi,

I created a Gin Index using :

''GinIndex(OpClass(Lower('title'), name='gin_trgm_ops'),
name="name_gin_trgm_title_affaire"),''

makemigrations generates the following code :

''migrations.AddIndex(
'' model_name='affaire',
index=django.contrib.postgres.indexes.GinIndex(django.contrib.postgres.indexes.OpClass(django.db.models.functions.text.Lower('title'),
name='gin_trgm_ops'), name='name_gin_trgm_title_affaire'),''
),''

SQLMIGRATE generates a wrong code :

''CREATE INDEX "name_gin_trgm_title_affaire" ON "affaires_affaire" USING
gin ((LOWER("title")));''

Instead of (too many parenthesis) :

''CREATE INDEX "name_gin_trgm_title_affaire" ON "affaires_affaire" USING
gin (LOWER("title"));''

There is a manual workaround, but its annoying.

Thank you.

Regards
--
Ticket URL: <https://code.djangoproject.com/ticket/35311>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

Django

unread,
Mar 16, 2024, 4:39:19 AM3/16/24
to django-...@googlegroups.com
#35311: Addindex operation generates wrong sql code for Postgresql GinIndex
-------------------------------------+-------------------------------------
Reporter: Pierre Juhen | Owner: nobody
Type: Bug | Status: new
Component: Database layer | Version: 5.0
(models, ORM) |
Severity: Normal | Resolution:
Keywords: postgresql | Triage Stage:
migration | Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Description changed by Pierre Juhen:

Old description:

> Hi,
>
> I created a Gin Index using :
>
> ''GinIndex(OpClass(Lower('title'), name='gin_trgm_ops'),
> name="name_gin_trgm_title_affaire"),''
>
> makemigrations generates the following code :
>
> ''migrations.AddIndex(
> '' model_name='affaire',
> index=django.contrib.postgres.indexes.GinIndex(django.contrib.postgres.indexes.OpClass(django.db.models.functions.text.Lower('title'),
> name='gin_trgm_ops'), name='name_gin_trgm_title_affaire'),''
> ),''
>
> SQLMIGRATE generates a wrong code :
>
> ''CREATE INDEX "name_gin_trgm_title_affaire" ON "affaires_affaire" USING
> gin ((LOWER("title")));''
>
> Instead of (too many parenthesis) :
>
> ''CREATE INDEX "name_gin_trgm_title_affaire" ON "affaires_affaire" USING
> gin (LOWER("title"));''
>
> There is a manual workaround, but its annoying.
>
> Thank you.
>
> Regards

New description:

Hi,

I created a Gin Index using :

''GinIndex(OpClass(Lower('title'), name='gin_trgm_ops'),
name="name_gin_trgm_title_affaire"),''

makemigrations generates the following code :

''migrations.AddIndex(
'' model_name='affaire',
index=django.contrib.postgres.indexes.GinIndex(django.contrib.postgres.indexes.OpClass(django.db.models.functions.text.Lower('title'),
name='gin_trgm_ops'), name='name_gin_trgm_title_affaire'),''
),''

SQLMIGRATE generates a wrong code :

''CREATE INDEX "name_gin_trgm_title_affaire" ON "affaires_affaire" USING
gin ((LOWER("title"), name=gin_trgm_ops));''

Instead of (too many parenthesis) :

''CREATE INDEX "name_gin_trgm_title_affaire" ON "affaires_affaire" USING
gin (LOWER("title"), name=gin_trgm_ops);''

There is a manual workaround, but its annoying.

Thank you.

Regards

--
--
Ticket URL: <https://code.djangoproject.com/ticket/35311#comment:1>

Django

unread,
Mar 16, 2024, 6:29:57 AM3/16/24
to django-...@googlegroups.com
#35311: Addindex operation generates wrong sql code for Postgresql GinIndex
-------------------------------------+-------------------------------------
Reporter: Pierre Juhen | Owner: nobody
Type: Bug | Status: closed
Component: Database layer | Version: 5.0
(models, ORM) |
Severity: Normal | Resolution: duplicate
Keywords: postgresql | Triage Stage:
migration | Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Tim Graham):

* resolution: => duplicate
* status: new => closed


Old description:

> Hi,
>
> I created a Gin Index using :
>
> ''GinIndex(OpClass(Lower('title'), name='gin_trgm_ops'),
> name="name_gin_trgm_title_affaire"),''
>
> makemigrations generates the following code :
>
> ''migrations.AddIndex(
> '' model_name='affaire',
> index=django.contrib.postgres.indexes.GinIndex(django.contrib.postgres.indexes.OpClass(django.db.models.functions.text.Lower('title'),
> name='gin_trgm_ops'), name='name_gin_trgm_title_affaire'),''
> ),''
>
> SQLMIGRATE generates a wrong code :
>
> ''CREATE INDEX "name_gin_trgm_title_affaire" ON "affaires_affaire" USING
Comment:

Duplicate of #33021. `django.contrib.postgres` must be in `INSTALLED_APPS`
when using `OpClass()`. See
[https://docs.djangoproject.com/en/stable/ref/contrib/postgres/indexes
/#opclass-expressions docs] and related ticket #32770.
--
Ticket URL: <https://code.djangoproject.com/ticket/35311#comment:2>
Reply all
Reply to author
Forward
0 new messages