Добавить разделы в существующую таблицу на основе текущей даты

0

Я бы хотел разбить существующую таблицу на 3 раздела. Во время обновления нашего решения скрипт powershell подключится к серверу MySQL и выполнит файл сценария.

Я попробовал следующий запрос для добавления разделов:

Alter Table 'mytable'  
  PARTITION BY RANGE (TO_DAYS('TimeStart')) 
(
    PARTITION start                 VALUES LESS THAN (0),
    PARTITION "from"+(curdate()+0)  VALUES LESS THAN (curdate()+1),
    PARTITION future                VALUES LESS THAN MAXVALUE
);

column timestart (datetime(3) NOT NULL) является частью первичного ключа.

Раздел в середине требует определенных значений, чтобы сделать его совместимым с запросами на обслуживание, выполняемыми с помощью службы Windows с некоторым интервалом.

Запрос не выполняется по двум причинам:

  1. Создание имени раздела: Я хотел бы получить, например, "from20180220", когда скрипт был выполнен сегодня. Сообщение об ошибке

    Код ошибки: 1064. У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '' from "+ (curdate() +0). ЦЕННОСТИ МЕНЬШЕ (curdate() +1), PARTITION future 'в строке 5

  2. Создание значения раздела. Когда скрипт запускается сегодня (19 февраля), я хотел бы иметь эквивалент VALUES LESS THAN (TO_DAYS('2018-2-20').

    Код ошибки: 1064. Постоянные, случайные или зависящие от времени выражения в функции (под) разделения не допускаются вблизи '), PARTITION future VALUES LESS THAN MAXVALUE)' в строке 5

Я попробовал TO_DAYS(curdate())+1. На самом деле, я не ожидал, что MySQL будет иметь закрытие...

Как можно решить эти ошибки?

Теги:
database-partitioning

2 ответа

1
Лучший ответ

Вы пытаетесь использовать MySQL-функции манипуляции с данными, такие как CURDATE() и TO_DAYS() в коде определения данных. Вы не можете этого сделать.

Вам нужно написать какую-то программу для записи небольшого файла, содержащего команду Alter Table, а затем запустить этот файл в MySQL.

1

Объяснения от O.Jones немного коротки.

Вам нужно использовать скрипт другого языка, например php, perl, python...

Тогда напишите что-то вроде работы:

Alter Table 'mytable'  
  PARTITION BY RANGE (TO_DAYS('TimeStart')) 
(
    PARTITION start                 VALUES LESS THAN (0),
    PARTITION from".$curdate."      VALUES LESS THAN TO_DAYS(".$nextdateTime."),
    PARTITION future                VALUES LESS THAN MAXVALUE
);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню