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

Đang mở
#1,273 0 bình luận 1 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 10 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
45/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Đình trệ
Công nghệ
go, mysql
Lĩnh vực
database

Hướng nghiên cứu

Bắt đầu bằng cách tái hiện câu lệnh ALTER đã được báo cáo trên MySQL và so sánh kết quả của nó với kết quả của gh-ost. Sau đó, theo dõi cách gh-ost xử lý các câu lệnh ALTER đổi tên và thêm lại các cột. Hoàn thành khi cột n1 đã được đổi tên vẫn giữ các giá trị ban đầu, trong khi cột c1 mới được thêm có giá trị NULL, khớp với hành vi thông thường của MySQL.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

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    |
+----+------+------+------+
Ngôn ngữ chính
Go
Star
13.6k
Fork
1.4k
Merge trung bình
9 ngày 19 giờ
Pull request đã merge (30 ngày)
1

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của github/gh-ost

Tất cả issue của github/gh-ost

Issue tương tự

Thêm issue về Go

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.