requete et erreur ambigues

Hi

Est ce que quelqu'un peut m'expliquer la requete:

INSERT `spip_sdis`.spip_meta (nom, valeur) VALUES ('invalider', 'oui')

C'est un intranet en 1.9.2.h avec un extranet base sur une replication de la base de donnees de l'intranet (master et slave). Mais depuis quelque jours j'ai une erreur qui apparait sur l'extranet concernant cette requete. L'erreur est:

  Error 'Duplicate entry 'invalider' for key 1' on query. Default database: 'spip_sdis'. Query: 'INSERT `spip_sdis`.spip_meta (nom, valeur) VALUES ('invalider', 'oui')'

et elle empeche la replication. De plus je ne trouve pas cette entree 'invalider' dans spip_meta de la base master.

Merci d'avance

George

george@middleeastwatch.net a écrit :

Error 'Duplicate entry 'invalider' for key 1' on query. Default database: 'spip_sdis'. Query: 'INSERT `spip_sdis`.spip_meta (nom, valeur) VALUES ('invalider', 'oui')'

sur une mysql de version supérieure à 4.1, on peut utiliser :

   INSERT INTO `spip_sdis`.spip_meta (nom, valeur)
     VALUES ('invalider', 'oui')
     ON DUPLICATE KEY UPDATE valeur = 'oui';

(ne pas s'inquiéter de ce que mysql répondra que 2 enregistrements ont été affectés : il n'y en aura bien que 1 seul de inséré/updaté)

Quoting denisb <denisb@laposte.net>:

george@middleeastwatch.net a écrit :

Error 'Duplicate entry 'invalider' for key 1' on query. Default database: 'spip_sdis'. Query: 'INSERT `spip_sdis`.spip_meta (nom, valeur) VALUES ('invalider', 'oui')'

sur une mysql de version supérieure à 4.1, on peut utiliser :

  INSERT INTO `spip_sdis`.spip_meta (nom, valeur)
    VALUES ('invalider', 'oui')
    ON DUPLICATE KEY UPDATE valeur = 'oui';

(ne pas s'inquiéter de ce que mysql répondra que 2 enregistrements ont été affectés : il n'y en aura bien que 1 seul de inséré/updaté)

Oui, mais je sais pas du tout d'ou vient cette requete et ce qu'elle veut dire, je ne la vois ni dans mysql.log ni dans spip.log et il n'y a pas d'entree dans spip_meta avec ce nom.

George

george@middleeastwatch.net a écrit :

Oui, mais je sais pas du tout d'ou vient cette requete et ce qu'elle veut dire, je ne la vois ni dans mysql.log ni dans spip.log et il n'y a pas d'entree dans spip_meta avec ce nom.

sur un spip 1.9.2h [13886], l'appel est fait depuis
ecrire/inc/invalideur.php (ligne 116) :

   ecrire_meta('invalider', 'oui'); // se verifier soi-meme

et lance la fonction 'ecrire_meta()' de
ecrire/inc/meta.php (ligne 30) :

   spip_query("INSERT spip_meta (nom, valeur)
       VALUES ("._q($nom).", " . _q($valeur) . ")");

mais, normalement (!), cette écriture est soit un INSERT
soit un UPDATE...

Quoting denisb <denisb@laposte.net>:

sur un spip 1.9.2h [13886], l'appel est fait depuis
ecrire/inc/invalideur.php (ligne 116) :

  ecrire_meta('invalider', 'oui'); // se verifier soi-meme

et lance la fonction 'ecrire_meta()' de
ecrire/inc/meta.php (ligne 30) :

  spip_query("INSERT spip_meta (nom, valeur)
      VALUES ("._q($nom).", " . _q($valeur) . ")");

mais, normalement (!), cette écriture est soit un INSERT
soit un UPDATE...

Mais est ce que je peux modifier cette requete dans ecrire_meta sans probleme?
J'ai vu que dans SPIP 2 la fonction applique_invalideur est vide donc est ce que ce probleme sera resolu lors de la mise a jour du site?

merci

George

george@middleeastwatch.net a écrit :

Mais est ce que je peux modifier cette requete dans ecrire_meta sans probleme?
J'ai vu que dans SPIP 2 la fonction applique_invalideur est vide donc est ce que ce probleme sera resolu lors de la mise a jour du site?

le problème est que cette erreur ne 'devrait' pas arriver, puisque
la fonction est sensée utiliser UPDATE si une meta de nom 'invalider'
existe déjà...

de plus, tu dis ne pas avoir de meta de nom 'invalider' dans la table spip_meta ; donc mysql ne devrait pas crier à la duplicate key
en cas d'INSERT !

peut-être est-ce lié à la réplication des bases ;
peut-être la table spip_meta de la base 'première' a-t'elle
besoin d'un coup de REPAIR ou d'OPTIMIZE (histoire
de requinquer les index...)

depuis phpmyadmin :
   REPAIR TABLE `spip_meta`
ou
   OPTIMIZE TABLE `spip_meta`