A volte, in determinate circostanze, wp_options (o qualsiasi altra tabella) può perdere il suo indice di chiave primaria.
Il motivo esatto di questo problema non è chiaro al 100%. Sembra che questo possa accadere se il database è stato migrato manualmente da un database all’altro o usando un Plugin o uno strumento che non copriva tutte le configurazioni, come l’uso di versioni MySQL diverse o tipi come InnoDB o MyISAM.
Per essere chiari: WP STAGING non è la causa di questo errore. Ti aiutiamo solo a rilevare quell’errore mostrando un avviso evidente nella tua dashboard admin quando questo accade:
Lo facciamo perché quell’errore è critico e molto insidioso. Non te ne accorgerai finché non sarà troppo tardi per risolverlo rapidamente. Più aspetti a risolverlo, più diventa difficile.
Questo perché il tuo sito si comporterà quasi come prima e funzionerà diversamente solo sotto il cofano.
Lascia che ti faccia un esempio rapido del perché questo è importante per la tabella wp_options:
La tabella wp_options ha una colonna chiamata option_id. Questo ID è solitamente univoco e può essere assegnato solo una volta a una riga. L’ID viene incrementato automaticamente per ogni riga in questo modo:
option_id | option_name
1 | option1
2 | option2
3 | option3
Se la chiave primaria manca, l’option_id non viene più incrementato e tutte le nuove righe otterranno option_id numero 0 come questo:
option_id | option_name
1 | option1
2 | option2
3 | option3
0 | option4
0 | option5
0 | option6
Il problema appare quando provi a esportare e importare queste righe in un altro database. L’option_id deve essere un numero univoco, quindi mostrerà errori di insert SQL come “Can not insert duplicate key … ” e fermerà la migrazione.
Di conseguenza, WP STAGING e qualsiasi altro Plugin di migrazione non possono eseguire il trasferimento dei dati del database su un altro database. Ad esempio, il processo di push dal sito di staging al sito di produzione fallirà.
Questo screenshot mostra una normale tabella wp_options con una chiave primaria impostata sulla colonna option_id:

Questo secondo screenshot mostra la tabella wp_options con una chiave primaria mancante:

Nota: in questo tutorial avrai bisogno di uno strumento di gestione del database, ad esempio “adminer” o phpMyAdmin.
Rinominare gli option_id esistenti
- Fai il Backup dell’intero database e scaricalo.
- Modifica i valori option_id per tutti gli ID duplicati.
Ti suggerisco di ottenere il numero più alto che hai nella colonna option_id e di incrementarlo uno per uno. Questo screencast mostra come puoi farlo:
Aggiungere l’indice della chiave primaria e modificare la tabella
- Apri phpMyAdmin o adminer e vai alla tabella wp_options.
- Clicca su “alter indexes” come in questo screenshot:

- Poi imposta “option_id” come chiave primaria:

- Se ricevi l’errore “Duplicate entry ‘0’ for key PRIMARY”, significa che hai ancora ID duplicati nella tabella e non li hai modificati tutti:

- Se è così, trova i restanti e incrementa i loro valori in modo che non ci siano più duplicati nella tabella. Dopo, puoi ripetere per aggiungere la PRIMARY KEY alla tabella.
Dopo aver risolto la chiave primaria mancante, sei pronto per pubblicare il sito di staging sul sito live; tuttavia, è consigliato fare il Backup del database.