Перемещение МНОГИХ разделов с одного стола на другой - Mysql - PullRequest
0 голосов
/ 03 мая 2020


У меня есть таблица со многими разделами по дате
Я хочу переместить некоторые из самых старых разделов в другую таблицу.


Мне удалось переместить самый старый раздел, следуя инструкции , но когда я пытаюсь переместить больше разделов, я получаю: Код ошибки: 1737. Найдена строка, которая не соответствует разделу
Итак, я удалил самый старый раздел и переместил следующий раздел - но затем строки из первых разделов вернулись в исходную таблицу (я не видел никакой документации для записи, которая go назад ...)

Как я могу переместить три первых раздела в другой Таблица? СПАСИБО

CREATE TABLE `TestPartA` (
    `Name` VARCHAR(50) NOT NULL,
    `Time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `Slot` INT(11) NOT NULL DEFAULT '-1',
    `Text` VARCHAR(50) NOT NULL,
    PRIMARY KEY (`Name`, `Text`, `Time`),
    INDEX `ClusterTimeIdx` (`Name`, `Time`, `Slot`),
    INDEX `Time` (`Time`)
)
 PARTITION BY RANGE (TO_DAYS(TIME))
(PARTITION p20190407 VALUES LESS THAN (TO_DAYS('2019-04-07')) ,
 PARTITION p20190421 VALUES LESS THAN (TO_DAYS('2019-04-21')) ,
 PARTITION p20190428 VALUES LESS THAN (TO_DAYS('2019-04-28')),
 PARTITION p20190505 VALUES LESS THAN (TO_DAYS('2019-05-05')))  ;

CREATE TABLE TestPartB LIKE TestPartA;
ALTER TABLE TestPartB REMOVE PARTITIONING;

insert into TestPartA values ('A','2019-04-02',1,'W1');
insert into TestPartA values ('A','2019-04-04',1,'W1');
insert into TestPartA values ('A','2019-04-08',1,'W1');
insert into TestPartA values ('A','2019-04-20',1,'W1');
insert into TestPartA values ('A','2019-05-01',1,'W1');

SELECT PARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME = 'TestPartA';

enter image description here

-- move the first partition 
ALTER TABLE TestPartA EXCHANGE PARTITION p20190407 WITH TABLE TestPartB; -- Works GREAT
select * from TestPartA;
select * from TestPartB;
SELECT PARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME = 'TestPartA'; -- this is not working any more - but according to documentation it happens sometimes

enter image description here

--move the second partition
ALTER TABLE TestPartA EXCHANGE PARTITION p20190421 WITH TABLE TestPartB; -- FAILED

ALTER TABLE TestPartA drop PARTITION p20190407;

ALTER TABLE TestPartA EXCHANGE PARTITION p20190421 WITH TABLE TestPartB; -- Succeed but the rows from the first partitions returned to table A
select * from TestPartA;
select * from TestPartB;

enter image description here

...