6

我已经安装了几年的 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 和数据库。我不知道这是什么意思。谁能帮我一把?先感谢您。

4

2 回答 2

3

来自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

于 2015-02-26T08:44:01.163 回答
-1

你有没有想过问问制作它的人?最可能的原因是在您当前版本和您希望安装的版本之间的某个时间点存在非增量更新。换句话说,如果不首先安装至少一个所需的中间版本,您就无法从您的版本飞跃到新版本。这方面的信息应该可以从开发人员那里获得。

于 2013-05-31T19:39:17.963 回答