Projet

Général

Profil

Development #66694

base_adresse: ajouter des index sur unaccent_name et zipcode et tous les champs qui servent aux recherches

Ajouté par Benjamin Dauvergne il y a presque 2 ans. Mis à jour il y a 2 mois.

Statut:
Solution déployée
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
28 juin 2022
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Pour éviter de charger la base avec des scans linéaires de la liste des 36000 communes de France.


Fichiers

0001-wip.patch (3,01 ko) 0001-wip.patch Benjamin Dauvergne, 28 juin 2022 12:36

Révisions associées

Révision ee1baf8b (diff)
Ajouté par Benjamin Dauvergne il y a 3 mois

base_adresse: add indexes on on geographic models names (#66694)

Révision bbf7aabb (diff)
Ajouté par Benjamin Dauvergne il y a 3 mois

Revert base_adresse: add indexes on on geographic models names (#66694)

This reverts commit ee1baf8b50c7b629e082b83482dfc6c181d07de9.

Révision 33b39c52 (diff)
Ajouté par Benjamin Dauvergne il y a 2 mois

base_adresse: add indexes on on geographic models names (#66694)

Historique

#1

Mis à jour par Benjamin Dauvergne il y a presque 2 ans

  • Assigné à mis à Benjamin Dauvergne
#2

Mis à jour par Benjamin Dauvergne il y a presque 2 ans

C'est ce qu'il faudrait faire si on était en Django 3.2 pour avoir dex indexs sur les expressions, pour améliorer la rechercher sur les rues il faudrait un index trigramme sur une version .lower() du nom parce qu'on fait un icontains qui gagnerait à se transformer en simple __contains (pareil pour le __istartswith sur unaccent_name, on aurait pu éviter un index custom si unaccent_name était déjà en casse fixe).

#3

Mis à jour par Benjamin Dauvergne il y a presque 2 ans

  • Assigné à Benjamin Dauvergne supprimé

En attendant il faudrait passer par des migrations SQL :/

#4

Mis à jour par Robot Gitea il y a environ un an

  • Statut changé de Nouveau à Solution proposée
  • Assigné à mis à Benjamin Dauvergne

Benjamin Dauvergne (bdauvergne) a ouvert une pull request sur Gitea concernant cette demande :

#5

Mis à jour par Benjamin Dauvergne il y a environ un an

On est enfin en 3.2, j'ai donc pu finir ce patch. Ça demande à ce que l'extension trigram soit facilement installable, je ne pense pas que ce soit encore un problème.

#6

Mis à jour par Benjamin Dauvergne il y a presqu'un an

  • Statut changé de Solution proposée à En cours
#8

Mis à jour par Benjamin Dauvergne il y a 12 mois

  • Statut changé de En cours à Solution proposée
#9

Mis à jour par Benjamin Dauvergne il y a 7 mois

Ping.

#10

Mis à jour par Benjamin Dauvergne il y a 5 mois

Validé qu'il n'y a aucun souci avec l'utilisation de pg_trgm sur nos déploiements.

#11

Mis à jour par Robot Gitea il y a 4 mois

  • Statut changé de Solution proposée à Solution validée

Nicolas Roche (nroche) a approuvé une pull request sur Gitea concernant cette demande :

#12

Mis à jour par Robot Gitea il y a 3 mois

  • Statut changé de Solution validée à Résolu (à déployer)

Benjamin Dauvergne (bdauvergne) a mergé une pull request sur Gitea concernant cette demande :

#13

Mis à jour par Benjamin Dauvergne il y a 3 mois

  • Statut changé de Résolu (à déployer) à En cours

Comme j'ai le nez creux je n'ai pas taggé et forcément un truc ne passe pas dans la migration en dév :

Running migrations:
  Applying base_adresse.0031_add_indexes...Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/django/db/backends/utils.py", line 82, in _execute
    return self.cursor.execute(sql)
           ^^^^^^^^^^^^^^^^^^^^^^^^
psycopg2.errors.UndefinedObject: operator class "gin_trgm_ops" does not exist for access method "gin" 

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/lib/passerelle/manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/lib/python3/dist-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
    utility.execute()
  File "/usr/lib/python3/dist-packages/django/core/management/__init__.py", line 413, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/lib/python3/dist-packages/django/core/management/base.py", line 354, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/lib/python3/dist-packages/passerelle/utils/defer.py", line 93, in BaseCommand_execute
    return old_BaseCommand_execute(self, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/core/management/base.py", line 398, in execute
    output = self.handle(*args, **options)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/hobo/multitenant/management/commands/migrate_schemas.py", line 77, in handle
    self.run_migrations(tenant, settings.TENANT_APPS, step, len_tenants)
  File "/usr/lib/python3/dist-packages/hobo/multitenant/management/commands/migrate_schemas.py", line 98, in run_migrations
    command.execute(*self.args, **self.options)
  File "/usr/lib/python3/dist-packages/passerelle/utils/defer.py", line 93, in BaseCommand_execute
    return old_BaseCommand_execute(self, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/core/management/base.py", line 398, in execute
    output = self.handle(*args, **options)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/core/management/base.py", line 89, in wrapped
    res = handle_func(*args, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/core/management/commands/migrate.py", line 244, in handle
    post_migrate_state = executor.migrate(
                         ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/db/migrations/executor.py", line 117, in migrate
    state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/db/migrations/executor.py", line 147, in _migrate_all_forwards
    state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/db/migrations/executor.py", line 227, in apply_migration
    state = migration.apply(state, schema_editor)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/db/migrations/migration.py", line 126, in apply
    operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
  File "/usr/lib/python3/dist-packages/django/db/migrations/operations/models.py", line 761, in database_forwards
    schema_editor.add_index(model, self.index)
  File "/usr/lib/python3/dist-packages/django/db/backends/postgresql/schema.py", line 218, in add_index
    self.execute(index.create_sql(model, self, concurrently=concurrently), params=None)
  File "/usr/lib/python3/dist-packages/django/db/backends/base/schema.py", line 145, in execute
    cursor.execute(sql, params)
  File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/__init__.py", line 562, in execute
    return real_execute(self, sql, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/db/backends/utils.py", line 66, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/db/backends/utils.py", line 75, in _execute_with_wrappers
    return executor(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/db/backends/utils.py", line 79, in _execute
    with self.db.wrap_database_errors:
  File "/usr/lib/python3/dist-packages/django/db/utils.py", line 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/usr/lib/python3/dist-packages/django/db/backends/utils.py", line 82, in _execute
    return self.cursor.execute(sql)
           ^^^^^^^^^^^^^^^^^^^^^^^^
django.db.utils.ProgrammingError: operator class "gin_trgm_ops" does not exist for access method "gin" 

#14

Mis à jour par Benjamin Dauvergne il y a 3 mois

C'est le bazar visiblement la classe d'opértaeur a été créée dans un schéma spécifique :

 gist   | text                        | demo_passerelle_dev_entrouvert_org.gtrgm | demo_passerelle_dev_entrouvert_org.gist_trgm_ops | no

#15

Mis à jour par Benjamin Dauvergne il y a 3 mois

Et encore merci stackoverflow https://stackoverflow.com/questions/12986368/installing-postgresql-extension-to-all-schemas

Je n'avais pas eu le problème sur authentic car je créais l'extension dans le schéma public qui est toujours inclus dans le search_path par défaut mais donc la bonne solution c'est de créer les extension dans pg_catalog et Django ne sait pas faire cela, donc ce sera du RunSQL :

+        migrations.RunSQL(
+            [
+                'CREATE EXTENSION IF NOT EXISTS pg_trgme WITH SCHEMA pg_catalog',
+            ],
+            reverse_sql=[
+                'DROP EXTENSION IF EXISTS pg_trgm'
+            ]
+        ),

#16

Mis à jour par Robot Gitea il y a 3 mois

Benjamin Dauvergne (bdauvergne) a ouvert une pull request sur Gitea concernant cette demande :

#17

Mis à jour par Robot Gitea il y a 3 mois

  • Statut changé de En cours à Solution proposée
#18

Mis à jour par Benjamin Dauvergne il y a 3 mois

  • Statut changé de Solution proposée à En cours

Déplacer l'extension du schéma pg_catalog à public sur suggestion de Pierre D.

#19

Mis à jour par Benjamin Dauvergne il y a 3 mois

  • Statut changé de En cours à Solution proposée
#20

Mis à jour par Robot Gitea il y a 3 mois

  • Statut changé de Solution proposée à Solution validée

Nicolas Roche (nroche) a approuvé une pull request sur Gitea concernant cette demande :

#21

Mis à jour par Robot Gitea il y a 2 mois

  • Statut changé de Solution validée à Résolu (à déployer)

Benjamin Dauvergne (bdauvergne) a mergé une pull request sur Gitea concernant cette demande :

#22

Mis à jour par Transition automatique il y a 2 mois

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF