Accéder au contenu.
Menu Sympa

fr - Re: [sympa-fr] Erreur lors du upgrade

Objet : Pour les administrateurs de serveurs de listes utilisant le logiciel Sympa

Archives de la liste

Chronologique Discussions  
  • From: Florin Grosu <adresse@cachée>
  • To: adresse@cachée
  • Subject: Re: [sympa-fr] Erreur lors du upgrade
  • Date: Tue, 01 Mar 2011 16:18:51 +0100

Bonjour,

J'ai rencontré une erreur similaire lorsque j'ai lancé une deuxième fois sympa.pl --upgrade. La première fois, sympa avait déjà modifié la bd. Précision: c'était une machine de test, j'ai pu reproduire l'erreur plusieurs fois... Voici ce que je me suis noté à l'époque:
---

Si doublons dans la base de données, lors du lancement de l'upgrade, il faut:

# mysql -u root -p
# CREATE TABLE truc AS SELECT DISTINCT * FROM subscriber_table GROUP BY list_subscriber,user_subscriber; // ceci crée la table truc et insère les enregistrements uniques de la table subscriber_table // (autrement dit, on élimine les doublons)
# DELETE FROM subscriber_table; // suppression des enregistrement
# INSERT INTO subscriber_table SELECT * FROM truc; // copie les enregistrements sans les doublons // ou encore:
# ALTER IGNORE TABLE subscriber_table ADD UNIQUE INDEX(list_subscriber,user_subscriber);

Pour refaire l'upgrade, modifier dans le fichier ci-dessous la version (4.1.5)

# vim /etc/sympa/data_structure.version

Ensuite lancer la migration

# /var/lib/sympa/bin/sympa.pl --upgrade
---

Je pense que ça doit marcher également si on ré-copie la bd.
Cordialement,
Florin Grosu


On 02/16/2011 06:49 PM, TDE wrote: Bonjour,

Lors du upgrade, au moment de la mise à jour de la base (" Updating the new robot_subscriber and robot_admin  Db fields..."), j'ai une erreur SQL :

DBD::mysql::db do failed: Duplicate entry 'xxx' for key 'PRIMARY' at /mail/sympa_ldif/bin/Upgrade.pm line 237.
err Upgrade::upgrade() Unable to execute SQL statement "UPDATE subscriber_table SET robot_subscriber='xxxx' WHERE (list_subscriber='xxxx')" : Duplicate entry 'xxx'

Cela se produit lorsque l'on a comme entrée :
(1) robot1 => liste1 => user toto
(2) robot2 => liste1 => user toto
or la clé primaire est {robot1,liste1,user} pour la table subscriber_table

En ligne 237, nous avons :
my $statement = sprintf "UPDATE %s_table SET robot_%s=%s WHERE (list_%s=%s)",
<=>
UPDATE subscriber_table SET robot_subscriber=robot2 WHERE (list_subscriber=liste1)

je ne vois pas trop à quoi ça sert car le champs robot_subscriber est correctement remplis (j'avais supprimé auparavant dans mon dump bdd avant, tous les INSERT INTO sans de robot définis)
mais on vois bien que le update va rentrer en conflit avec l'entrée (2)


J'ai changé le WHERE en rajoutant la condition de faire le UPDATE si  robot_subscriber est vide mais je ne sais pas si c'est cela peut provoquer des pb futurs.

Merci de vos retours.
Thibaut de Dompsure







Archives gérées par MHonArc 2.6.19+.

Haut de le page