Mise à jour V17.0.3 à 18.0.x

Bonjour

Je renconre le même problème sur la mise à jour des mes installations Dolibarr en passant de la 17.0.3 à n’importe quelle verison 18.0.x (0/1/2/3). Le message d’erreur est le suivant :

Choix du script de migration 17.0.0-18.0.0.sql
Erreur DB_ERROR_1452 (Req 23): ALTER TABLE llx_product_stock ADD CONSTRAINT fk_product_product_rowid FOREIGN KEY (fk_product) REFERENCES llx_product (rowid);
Cannot add or update a child row: a foreign key constraint fails (database_1.#sql-alter-6993-1140b4d, CONSTRAINT fk_product_product_rowid FOREIGN KEY (fk_product) REFERENCES llx_product (rowid))

Une idée ? Quelqu’un à déjà eu le problème ?

Un grand merci

Bonjour
j’en parlais dans le fil suivant : Suppression des adherents qui n'ont plus renouvelle leur adhesion depuis 3 ans - #6 par erics

En bref, dans la table stock vous avez des références vers des produits qui n’existent plus

la version de dolibarr-18 apporte une amélioration notable sur la gestion des contraintes d’intégrité qui n’était pas présente jusqu’alors

de ce fait il était possible de supprimer de la table product des lignes alors que la table stock y faisaient référence, mais le passage à dolibarr-18 « coince »

il faudrait donc commencer par nettoyer la table stock en cherchant les lignes orphelines et décider ce que vous voulez en faire …

si vous avez la possibilité de faire des requêtes SQL (phpmyadmin ou autre) lancez celle-ci :

SELECT * FROM llx_product_stock WHERE fk_product NOT IN (SELECT rowid FROM llx_product)

Et dites nous si ça retourne quelque chose ?

1 « J'aime »

Bonjour Erics

Sur mes deux instances j’ai en effet quelque chose qui sort.
Sur une base 1 ligne et sur l’autre… plus de 16 000 (base de dev donc explicable).

La solution serait donc de « couper » cette liaison en supprimant les résultats de cette requête, pour pouvoir passer la mise à jour et ensuite remettre des bonnes pratiques de gestion des stocks ?

En vous remerciant une fois encore pour votre temps et votre réponse.

Excellente journée

bonsoir @maxdevis
donc sur LA ligne problématique sur le stock, regardez la date (tms) … et jugez si cette ligne est importante ou pas, par exemple si ça correspond à un truc qui est vieux de 10 ans, supprimez la ligne tout simplement

par contre si c’est récent ça vaut le coup de chercher … quelle est l’information dans la colonne fk_product et pourquoi ce produit a été supprimé, est-ce possible de le « retrouver » (vieux backup par exemple qui remonterait à la date de « tms » de l’entrée dans la table stock) …

mais tant que cette ligne est présente la création de la contrainte d’intégrité sera bloquée

1 « J'aime »

Bonsoir Erics

En effet, cela solutionne le problème, sur des lignes de 2013. Je vais remettre à jour mes process internes.

Un grand merci pour votre solution qui fonctionne :slight_smile:

Excellente soirée

Hello,
J’ai eu le même message d’erreur et Dolibarr m’a proposé de passer outre le problème lors de la migration. J’ai bien des produits qui ne sont plus disponibles à la vente, mais je ne souhaitais pas en perdre la trace. Tous les produits (6000 environs) ont été créés par un module de liaison entre Prestashop et Dolibarr. Ce module n’est plus fonctionnel à cette heure et a été retiré. Je n’imagine pas qu’il puisse y avoir un souci d’intégrité, tous les produits semblent encore visibles dans Dolibarr. Je ne comprends toutefois pas l’erreur qu’il me retourne.

Citation
Erreur DB_ERROR_1452 (Req 31): ALTER TABLE llx_product_stock ADD CONSTRAINT fk_product_product_rowid FOREIGN KEY (fk_product) REFERENCES llx_product (rowid);
Cannot add or update a child row: a foreign key constraint fails (qf9oj_compta4.#sql-4ff_149ada, CONSTRAINT fk_product_product_rowid FOREIGN KEY (fk_product) REFERENCES llx_product (rowid))

Il me manquerait un lien ? ou une colonne ?

bonjour @audace le message est clair pour un développeur: vous avez des lignes dans la table stock qui font référence à des index de la table produits qui n’existent pas …