0

我遇到的问题是触发器定义在其中硬编码了原始模式名称,例如:

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

因此,如果使用 mysqldump 备份“销售”模式,然后尝试在同一台服务器上恢复到名为“sales_test”的新创建模式,我会收到一条错误消息,指出在同一事件中不允许使用多个触发器。

我当前的解决方案是在转储文件中手动将旧模式名称“sales”替换为新模式名称“sales_test”。这行得通,但有没有更简单、不那么乏味的解决方案?

4

1 回答 1

1

不要手动操作。由于您没有指定 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

会坚持正确放置模式名称,除非中间有空格。

于 2011-04-15T18:22:54.130 回答