Сброс схемы mysql5.5 с помощью триггеров и восстановление в новую схему с другим именем - PullRequest
0 голосов
/ 15 апреля 2011

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

TRIGGER `sales`.`tender_delete_trigger`
AFTER DELETE ON `sales`.`tender`
FOR EACH ROW
......

Таким образом, если выполнить резервное копирование схемы «sales» с использованием mysqldump, а затем попытаться восстановить заново созданную схему под названием «sales_test» на том же сервере, я получаю сообщение об ошибке, в котором говорится, что что-то вроде нескольких триггеров не допускается на одном и том же сервере. событие.

Мое текущее решение состоит в том, чтобы вручную заменить старое имя схемы «sales» новым именем схемы «sales_test» в файле дампа. Это работает, но есть ли более легкое, менее утомительное решение?

1 Ответ

1 голос
/ 15 апреля 2011

Не делайте этого вручную. Поскольку вы не указываете O / S, я буду считать Linux, хотя для большинства других есть эквиваленты:

vim -c'%s/`sales`/`new_schema_name`/g' -c':x' dumpfile.sql

Другая возможность - опустить имя схемы в триггерах. Предполагается текущая схема.


(редактировать)

1) Согласовано. Но переименование схемы - странная проблема для начала. 2) Это, безусловно, риск, поскольку могут быть таблицы и переменные с одинаковыми именами. Модификация шаблона может помочь:

  %s/\([^.]\)`sales`\([.]\)/\1`new_schema_name`\2/g

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...