我已经安装了Bugzilla多年没有升级。我使用的版本是3.6.12。今天我尝试将其升级到最新版本4.4但失败了。我按照说明使用bzr升级Bugzilla。当我运行checksetup.pl时,它给了我这个:
Updating column setter_id in table flags ...
Old: mediumint
New: mediumint NOT NULL
Updating column setter_id in table flags ...
Old: mediumint
New: mediumint NOT NULL
DBD::mysql::db do failed: Cannot change column 'setter_id': used in a foreign key constraint 'fk_flags_setter_id_profiles_userid' [for Statement "ALTER TABLE flags CHANGE COLUMN setter_id setter_id mediumint NOT NULL"] at Bugzilla/DB.pm line 710.
Bugzilla::DB::bz_alter_column_raw('Bugzilla::DB::Mysql=HASH(0x8663790)', 'flags', 'setter_id', 'HASH(0xc9c8cd8)', 'HASH(0xc9c8ff0)', undef) called at Bugzilla/DB.pm line 669
Bugzilla::DB::bz_alter_column('Bugzilla::DB::Mysql=HASH(0x8663790)', 'flags', 'setter_id', 'HASH(0xc9c8cd8)') called at Bugzilla/Install/DB.pm line 627
Bugzilla::Install::DB::update_table_definitions('HASH(0x3050880)') called at C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\Bugzilla-bzr\checksetup.pl line 169
我不擅长Perl和数据库。我不知道这是什么意思。任何人都可以帮我一把吗?提前谢谢。
答案 0 :(得分:2)
来自https://groups.google.com/forum/#!topic/mozilla.support.bugzilla/w7nqD89cBaQ。您可以删除表标志(我将此表空为空)并在没有外键约束的情况下重新创建它,运行checksetup.pl
并通过命令重新创建约束:
alter table flags add CONSTRAINT `fk_flags_setter_id_profiles_userid`FOREIGN KEY (`setter_id`)
REFERENCES `profiles` (`userid`) ON UPDATE CASCADE;
或编辑文件DB.pm并在行
后面添加一行命令SET foreign_key_checks = 0
$dbh = Bugzilla->dbh
$dbh->do('SET foreign_key_checks = 0');
所以我用另一种方式。我修改了我的转储并将setter_id列更改为NOT NULL列。线
`setter_id` mediumint(9) DEFAULT NULL,
到
`setter_id` mediumint(9) NOT NULL,
以下是连接到bugzilla数据库后要运行的SQL命令:
SET foreign_key_checks = 0;
ALTER TABLE flags MODIFY setter_id mediumint(9) NOT NULL;
SET foreign_key_checks = 1;
然后运行checksetup.pl
答案 1 :(得分:0)
你有没有想过要问那些制作它的人?最可能的原因是,在您当前版本和您希望安装的版本之间的某个时刻,存在非增量更新。换句话说,如果没有首先安装至少一个必需的中间版本,则无法从您的版本跳到新版本。有关这方面的信息应该可以从开发人员处获得。