Magento安装过程中数据表已存在解决笔记

作者:Jeen 发布于:2013-4-21 19:55 Sunday 分类:工作笔记

经常在使用旧版本的样本数据安装Magento的过程中会出现,数据表已存在的错误( Table ‘….’ already exists)

这边以一个我在 从Magento1.3.2.4 向Magento1.6.1.0升级过程中遇到的一个类似问题来做个简单记录吧

这边贴一段bug report
….Error in file: “/home/tester/public_html/app/code/core/Mage/Cms/sql/cms_setup/mysql4-upgrade-0.7.11-0.7.12.php” – SQLSTATE[42S01]: Base table or view already exists: 1050 Table ’1234_widget’ already exists”…..
这边只截取了部分关键信息,提示表1234_widget 已存在(当然1234_ 为表前缀),但是由于原站表中可能已经有一些我们必要的数据,即使没有必须的数据,在删除表的时候可能还会引起其他的外键问题。这边暂时的折中解决方法就是再次修改检测规则。
app/code/core/Mage/Cms/sql/cms_setup/mysql4-upgrade-0.7.11-0.7.12.php
查看编辑此文件,代码不长 就索性贴出来吧
$installer = $this;
$installer->startSetup();
if ($installer->getTable(‘cms_widget’) ) {
$installer->run(”
ALTER TABLE `{$installer->getTable(‘cms_widget’)}` COMMENT ‘Preconfigured Widgets’;
ALTER TABLE `{$installer->getTable(‘cms_widget’)}` RENAME TO `{$installer->getTable(‘widget/widget’)}`;
“);
}
$installer->endSetup();
这边具体的代码执行过程就不讲了,我也不是很清楚当中的细节
单从if语句的判断条件来看 似乎并没有检测 widget 表是否存在 (至于表前缀当然是在执行安装数据库的时候添加的)
于是乎修改限定条件,当表已经存在的时候就不用重新建立数据表了。(Magento版本间差异还是有一定的,但是单个数据表的结构不会有太大变化,所以这边也不用担心数据表由于版本问题导致其他异常了)
修改判断,添加此判断条件  !($installer->getTable(‘widget/widget’))  完成后代码如下
$installer = $this;
$installer->startSetup();
if ($installer->getTable(‘cms_widget’) && !($installer->getTable(‘widget/widget’))) {
$installer->run(”
ALTER TABLE `{$installer->getTable(‘cms_widget’)}` COMMENT ‘Preconfigured Widgets’;
ALTER TABLE `{$installer->getTable(‘cms_widget’)}` RENAME TO `{$installer->getTable(‘widget/widget’)}`;
“);
}
$installer->endSetup();
保存后清除 cache  session  及local.xml 等废弃文件
重新安装
安装成功

(当然这边的只是我遇到的一个提示异常的数据表,不过相信如果其他表也出现类似的异常,也可以用类似的方法来解决问题)

记此以作备忘 :-)

标签: magento

发表评论:

©2010-2024 Jeen All Rights Reserved.Powered by emlog 京ICP备15058100号-1