Bug #66394
pl/pgsql, l'enregistrement « new » n'a pas de champs « _end_datetime »
0%
Description
File "/usr/lib/python3/dist-packages/django/db/models/manager.py", line 82, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) File "/usr/lib/python3/dist-packages/django/db/models/query.py", line 1186, in _insert return query.get_compiler(using=using).execute_sql(return_id) File "/usr/lib/python3/dist-packages/django/db/models/sql/compiler.py", line 1377, in execute_sqlcursor.execute(sql, params) File "/usr/lib/python3/dist-packages/django/db/backends/utils.py", line 99, in execute return super().execute(sql, params) File "/usr/lib/python3/dist-packages/django/db/backends/utils.py", line 67, 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 76, in _execute_with_wrappers return executor(sql, params, many, context) File "/usr/lib/python3/dist-packages/django/db/backends/utils.py", line 84, in _execute return self.cursor.execute(sql, params) File "/usr/lib/python3/dist-packages/django/db/utils.py", line 89, in __exit__ raise dj_exc_value.with_traceback(traceback) from exc_value File "/usr/lib/python3/dist-packages/django/db/backends/utils.py", line 84, in _execute return self.cursor.execute(sql, params) django.db.utils.ProgrammingError: ERREUR: l'enregistrement « new » n'a pas de champs « _end_datetime » CONTEXT: fonction PL/pgsql set_end_datetime(), ligne 6 à affectation
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Lauréline Guérin il y a presque 2 ans
pas de _ignore_reason non plus ?
hypothèse: lorsque la 0052 est passée il y a 2 ans l'extension btree_Gist n'était pas dispo, elle l'est maintenant.
Mis à jour par Lauréline Guérin il y a presque 2 ans
- Fichier 0001-agendas-fix-pg-function-set_ignore_reason-on-desk-de.patch 0001-agendas-fix-pg-function-set_ignore_reason-on-desk-de.patch ajouté
- Statut changé de Nouveau à En cours
- Patch proposed changé de Non à Oui
au cas où, voici de quoi remettre d'équerre les instances qui en ont besoin.
migrations:
0128: vidée, pour éviter une opération inutile lors de la mep
0129: reprise de 0052, avec un IF NOT EXISTS sur la création des champs techniques (et rien en sql_forwards), et une mise à jour de _end_datetime uniquement s'il est null
0130: reprise de 0053, avec un DROP CONSTRAINT IF EXISTS avant l'ajout (pas de ADD CONSTRAINT IF NOT EXISTS dispo)
Mis à jour par Lauréline Guérin il y a presque 2 ans
Mis à jour par Lauréline Guérin il y a presque 2 ans
- Lié à Bug #66374: IntegrityError: ERREUR: la valeur d'une clé en conflit rompt la contrainte d'exclusion « tstzrange_constraint » ajouté
Mis à jour par Lauréline Guérin il y a presque 2 ans
- Statut changé de En cours à Solution proposée
- Assigné à mis à Lauréline Guérin
Mis à jour par Frédéric Péters il y a presque 2 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Lauréline Guérin il y a presque 2 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 0e000fa4300991094deb99d16fd6d697d7458536 Author: Lauréline Guérin <zebuline@entrouvert.com> Date: Sat Jun 18 22:19:46 2022 +0200 agendas: fix pg function set_ignore_reason on desk deletion (#66394)
Mis à jour par Transition automatique il y a presque 2 ans
- Statut changé de Résolu (à déployer) à Solution déployée
Mis à jour par Pierre Ducroquet il y a presque 2 ans
Pour info, ce qu'il s'est passé (je me base sur la prod, mais c'était pareil en recette)...
Avant PG13, l'extension btree_gist ne pouvait être installée que par un superuser.
Lorsque la migration a été jouée le 13 août 2020, l'extension n'était pas présente. Sur l'ensemble des tenants créés avant juin 2021, les colonnes ne sont pas présentes parce que l'extension n'avait pas été installée.
Une fois l'extension installée, on peut voir que les tenants ont bien les bonnes colonnes.
Requête utilisée :
select 'SELECT *, ''' || nspname || ''' FROM ' || nspname || '.' || pc.relname || ' WHERE app = ''agendas'' AND name=''0052_event_date_range_constraint'';' from pg_class pc join pg_namespace pn on pn.oid = pc.relnamespace join pg_class pc2 on pc2.relname = 'agendas_event' and pc2.relnamespace = pc.relnamespace where pc.relname = 'django_migrations' and not exists(select 1 from pg_attribute where attrelid = pc2.oid and attname = '_end_datetime');
Déterminer la date exacte d'installation de l'extension n'est pas facile, mais j'ai pu confirmer qu'elle a été installée entre le 25 mai 2021 et le 14 juin 2021:
chrono=# select oid, * from pg_extension where extname = 'btree_gist'; oid | extname | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition -----------+------------+----------+--------------+----------------+------------+-----------+-------------- 839654838 | btree_gist | 10 | 2200 | t | 1.5 | | (1 ligne) chrono=# select oid, * from pg_namespace where oid < 839654838 order by oid desc limit 2; oid | nspname | nspowner | nspacl -----------+------------------------------------------------+----------+-------- 800388535 | agendas_mesdemarches_eurelien_fr | 16401 | 794439243 | agendas_montpellier_eservices_montpellier3m_fr | 16401 | (2 lignes) chrono=# select oid, * from pg_namespace where oid > 839654838 order by oid asc limit 2; oid | nspname | nspowner | nspacl -----------+------------------------------------+----------+-------- 848017803 | agendas_isereconnect_fr | 16401 | 864689946 | agendas_services_agglo_haguenau_fr | 16401 | (2 lignes) chrono=# select * from agendas_mesdemarches_eurelien_fr.django_migrations limit 1; id | app | name | applied ----+--------------+--------------+------------------------------- 1 | contenttypes | 0001_initial | 2021-05-25 15:04:14.149322+00 (1 ligne) chrono=# select * from agendas_isereconnect_fr.django_migrations limit 1; id | app | name | applied ----+--------------+--------------+------------------------------- 1 | contenttypes | 0001_initial | 2021-06-14 19:58:25.589696+00 (1 ligne)
agendas: fix pg function set_ignore_reason on desk deletion (#66394)