gpt4 book ai didi

mysql - 无法在 pt-online-schema-change 中更改列和更改索引

转载 作者:行者123 更新时间:2023-11-28 23:14:37 25 4
gpt4 key购买 nike

我正在尝试更改列并同时更改表上的几个索引。为此,我正在使用 pt-online-schema-change 以便它可以在线发生,但我收到一个错误:

Error altering new table `db`.`_test_table_new`: DBD::mysql::db do failed: Key column 'foo' doesn't exist in table [for Statement "ALTER TABLE `db`.`_test_table_new` ADD INDEX test_table_composite_idx (foo, bar), DROP INDEX test_table_foo_idx, DROP_INDEX test_table_bar_idx, CHANGE COLUMN foo foo2 VARCHAR(127) NOT NULL;"] at /usr/bin/pt-online-schema-change line 9040.

表创建如下:

CREATE TABLE `test_table` (
`id` bigint(20) unsigned NOT NULL,
`foo` varchar(127) DEFAULT NULL,
`bar` varchar(32) CHARACTER SET ascii DEFAULT NULL,
KEY `test_table_id_idx` (`id`),
KEY `test_table_foo_idx` (`foo`, `id`),
KEY `test_table_bar_idx` (`bar`, `id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

本质上,我正在尝试以下操作:

ADD INDEX test_table_composite_idx (foo, bar)
DROP INDEX test_table_foo_idx,
DROP INDEX test_table_bar_idx,
CHANGE COLUMN foo foo2 TEXT;

我可以分别进行索引更改和列更改(但之后我需要将所有数据复制两次,我宁愿只复制一次),但如果我将两者加在一起,则会出错。感觉好像我错过了一些明显的东西;有什么想法吗?

最佳答案

我看到您正在尝试在名称设置为在同一查询中修改的列上应用新索引。所以替换这个:

ADD INDEX test_table_composite_idx (foo, bar)

用这个:

ADD INDEX test_table_composite_idx (foo2, bar)

现在,关于尝试单独的步骤:首先更改列名称,然后应用 ADD INDEX test_table_composite_idx (foo, bar)。你收到什么?一个错误。

现在,反转步骤。发生了什么?正如您所说,它有效。

祝你好运。

关于mysql - 无法在 pt-online-schema-change 中更改列和更改索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44438710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com