Получение ошибки 1503: первичный ключ должен включать все столбцы в функции разбиения таблиц

99
9

У меня есть структура таблицы, например -


CREATE TABLE `cdr` (`id` bigint(20) NOT NULL AUTO_INCREMENT,
`dataPacketDownLink` bigint(20) DEFAULT NULL,
`dataPacketUpLink` bigint(20) DEFAULT NULL,
`dataPlanEndTime` datetime DEFAULT NULL,
`dataPlanStartTime` datetime DEFAULT NULL,
`dataVolumeDownLink` bigint(20) DEFAULT NULL,
`dataVolumeUpLink` bigint(20) DEFAULT NULL,
`dataplan` varchar(255) DEFAULT NULL,
`dataplanType` varchar(255) DEFAULT NULL,
`createdOn` datetime DEFAULT NULL,
`deviceName` varchar(500) DEFAULT NULL,
`duration` int(11) NOT NULL,
`effectiveDuration` int(11) NOT NULL,
`hour` int(11) DEFAULT NULL,
`eventDate` datetime DEFAULT NULL,
`msisdn` bigint(20) DEFAULT NULL,
`quarter` int(11) DEFAULT NULL,
`validDays` int(11) DEFAULT NULL,
`dataLeft` bigint(20) DEFAULT NULL,
`completedOn` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `msisdn_index` (`msisdn`),
KEY `eventdate_index` (`eventDate`)
) ENGINE=MyISAM AUTO_INCREMENT=55925171 DEFAULT CHARSET=latin1

и когда я создаю раздел -


ALTER TABLE cdr PARTITION BY RANGE (TO_DAYS(eventdate))  (
PARTITION p01 VALUES LESS THAN (TO_DAYS('2013-09-01')),
PARTITION p02 VALUES LESS THAN (TO_DAYS('2013-09-15')),
PARTITION p03 VALUES LESS THAN (TO_DAYS('2013-09-30')),
PARTITION p04 VALUES LESS THAN (MAXVALUE));

получив


error 1503: A primary key must include all columns in the table partitioning function

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


Спасибо.

спросил(а) 2021-01-25T19:31:34+03:00 4 месяца, 2 недели назад
1
Решение
76

Я уже решил эту проблему, добавив eventdate с первичным ключом.

ответил(а) 2021-01-25T19:31:34+03:00 4 месяца, 2 недели назад
45

Возможные решения:

    изменить eventdate на eventDate в 'ALTER TABLE cdr PARTITION by RANGE (TO_DAYS (eventdate))'
    изменить eventDate на отметку времени. (mysql не может делать раздел в datetime)

ответил(а) 2021-01-25T19:31:34+03:00 4 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема