Bug #57540
crash SQL sur un import d'un export complet (zip)
0%
Description
Sur un import d'un export.wcs, j'ai ce crash :
Exception: type = '<class 'psycopg2.ProgrammingError'>', value = 'relation "formdata_2_formulaire_pour_test_charte_gr" does not exist LINE 1: SELECT count(*) FROM formdata_2_formulaire_pour_test_charte_... ^ '
qui serait lié à cette partie du code :
File "/usr/lib/python3/dist-packages/wcs/formdef.py", line 410, in store 408 # the formdef is currently being imported (self.id is None) 409 # or if there are not yet any submitted forms > 410 if self.id is None or self.data_class().count() == 0: 411 self.internal_identifier = new_internal_identifier 412 StorableObject.store(self, *args, **kwargs) locals: args = () comment = None kwargs = {} new_internal_identifier = 'page-pour-test-charte-graphique' object_only = False self = <FormDef 'Page pour test charte graphique' id:2>
car si le formulaire n'a pas encore de id, alors il n'a pas encore de table et donc le count SQL ne peut pas passer (et donc self.id is None or self.data_class().count() == 0:
= boum)
Fichiers
Révisions associées
Historique
Mis à jour par Thomas Noël il y a plus de 2 ans
Thomas Noël (congés → 11 octobre) a écrit :
car si le formulaire n'a pas encore de id, alors il n'a pas encore de table et donc le count SQL ne peut pas passer (et donc
self.id is None or self.data_class().count() == 0:
= boum)
N'importe quoi j'ai dit.
En fait on se retrouve plutôt ici avec un formdef qui a un id (self = <FormDef 'Page pour test charte graphique' id:2>) mais n'a pas encore de table SQL. J'ai cherché sans rien trouver.
Mis à jour par Frédéric Péters il y a plus de 2 ans
Ça ferait suite à #57118 (avant les tables n'étaient pas créées à l'import), je regarderai.
Mis à jour par Thomas Noël il y a plus de 2 ans
- Fichier export.wcs export.wcs ajouté
Pour reproduire, voici un export contenant un seul mini formdef nommé "crash 57540" (il porte l'id numéro 424242 qui n'existe certainement nulle part et on peut donc tenter un import sans risque). J'en ai modifié le XML ainsi :
- <internal_identifier>crash-57540</internal_identifier> + <internal_identifier>changed-crash-57540</internal_identifier>
et en cherchant à faire l'import on arrive bien au crash SQL.
Mis à jour par Frédéric Péters il y a plus de 2 ans
- Fichier 0001-formdef-don-t-try-preserving-intenral_identifier-in-.patch 0001-formdef-don-t-try-preserving-intenral_identifier-in-.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Comme le internal_identifier est exclusivement utilisé en mode pickle je choisis de juste ne pas faire de requête en SQL.
En passant il me semble que ça lève un autre problème avec cette idée de changement de nom de domaine par export/import, le nom de la table n'est pas dans l'export XML d'un formdef/carddef, résultat il va être recalculé et peut se trouver être différent de celui du site d'origine.
(ma préférence est d'arrêter avec cette perspective d'export/export et de plutôt voir pour une bascule qui se fasse avec les mêmes fichiers et la même base de données, à discuter ailleurs).
Mis à jour par Thomas Noël il y a plus de 2 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Frédéric Péters il y a plus de 2 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 2d2e90fbb51260f47d49465a82494b838bb8943f Author: Frédéric Péters <fpeters@entrouvert.com> Date: Tue Oct 5 10:23:18 2021 +0200 formdef: don't try preserving internal_identifier in SQL mode (#57540)
Mis à jour par Frédéric Péters il y a plus de 2 ans
- Statut changé de Résolu (à déployer) à Solution déployée
formdef: don't try preserving internal_identifier in SQL mode (#57540)