Fails to rename column when alter renames + re-adds new column with prev name

Ouverte
#1,273 0 commentaires 1 réaction 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 10 jours

Personne n'a encore pris cette issue.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
45/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
À l'abandon
Stack technique
go, mysql
Domaine
database

Piste de recherche

Commencez par reproduire l’instruction ALTER signalée sur MySQL et comparez son résultat avec celui de gh-ost. Suivez ensuite la gestion par gh-ost des instructions ALTER qui renomment et réajoutent des colonnes. Le travail est terminé lorsque la colonne n1 renommée conserve les valeurs d’origine, tandis que la colonne c1 nouvellement ajoutée est NULL, conformément au comportement normal de MySQL.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

When renaming a column and then re-creating it within the same ALTER statement, gh-ost deletes the entiretity of the name-changed column.

Example:

-- regular alter table (expected behaviour)
CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY auto_increment, c1 VARCHAR(100), c2 VARCHAR(100));
INSERT INTO t1 (c1, c2) VALUES ('a', 'b'), ('c', 'd'), ('e', 'f');
ALTER TABLE t1 RENAME COLUMN c1 TO n1, ADD COLUMN c1 varchar(100);
SELECT * FROM t1;
+----+------+------+------+
| id | n1   | c2   | c1   |
+----+------+------+------+
|  1 | a    | b    | NULL |
|  2 | c    | d    | NULL |
|  3 | e    | f    | NULL |
+----+------+------+------+

Using gh-ost:

go run . \
--max-load=Threads_running=25 \
--critical-load=Threads_running=1000 \
--chunk-size=1000 \
--user="[REDACTED]" \
--password="[REDACTED]" \
--host="127.0.0.1" \
--port=8030 \
--allow-on-master \
--database="test" \
--table="t1" \
--verbose \
--initially-drop-old-table \
--ok-to-drop-table \
--execute  --initially-drop-ghost-table --alter="RENAME COLUMN c1 TO n1, ADD COLUMN c1 varchar(100)"

Result:

+----+------+------+------+
| id | n1   | c2   | c1   |
+----+------+------+------+
|  1 | NULL | b    | a    |
|  2 | NULL | d    | c    |
|  3 | NULL | f    | e    |
+----+------+------+------+
Langage dominant
Go
Étoiles
13.6k
Forks
1.4k
Merge moyen
9 j 19 h
PR mergées (30 j)
1

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de github/gh-ost

Toutes les issues de github/gh-ost

Issues similaires

Plus d'issues Go

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.