5.4.1.1 アップグレード後に発生する 1062: Duplicate Entry error 対処法

2011年4月7日 at 19:05

ロリポップで確認しました。

5.4.1.1アップグレード後、記事ブロックや、特定のページタイプの新規作成をしようとするとき、白紙になったり、ページ中のコンテンツが真っ白になってしまう事象を確認しました。

これは、アップグレード時に、データベース内の特定のテーブルを変更しなければいけなのに、レンタルサーバーによって権限が与えられていないために、きちんとアップグレード処理ができないためです。

エラー文の例

Fatal error: Uncaught exception 'ADODB_Exception' with message 'mysql error: [1062: Duplicate entry 'XXX-xx' for key 1] in EXECUTE("insert into CollectionVersionBlockStyles (cID, cvID, bID, arHandle, csrID) values ('XX', 'XX', 'XXX', 'Main', 0)") ' in XXXXXXXXXXl/concrete/libraries/3rdparty/adodb/adodb-exceptions.inc.php:78 Stack trace: #0 XXXXXXXXXX/concrete/libraries/3rdparty/adodb/adodb.inc.php(1037): adodb_throw('mysql', 'EXECUTE', 1062, 'Duplicate entry...', 'insert into Col...', false, Object(ADODB_mysql)) #1 XXXXXXXXXX/concrete/libraries/3rdparty/adodb/adodb.inc.php(993): ADOConnection->_Execute('insert into Col...') #2 XXXXXXXXXX/concrete/libraries/database.php(73): ADOConnection->Execute('insert into Col...', Array) #3 [internal function]: Database->__call(Array, Array) #4 XXXXXXXXXX/concrete/models/block.php(404): Database->Execute('Execute', Array) #5 XXXXXXXXXX/concrete/startup/process.php(624): Block->alias('insert in XXXXXXXXXX/concrete/libraries/3rdparty/adodb/adodb-exceptions.inc.php on line 78



エラーのポイント

・アップグレード直後におこる
・ページの更新ができない
・記事ブロックを更新しようとすると、ページが真っ白になる
・エラー文に「mysql error: [1062: Duplicate entry」含まれる
・エラー文に「insert into CollectionVersionBlockStyles (cID, cvID, bID, arHandle, csrID)」含まれる


本家の対処方法
http://www.concrete5.org/community/forums/chat/adodb_exception-duplicate-entry-error/

対処方法

・phpMyAdminに行く
・データベースを選択
・SQLタブを選択
・「データベース○○上でクエリを実行する: 」テキストボックスの中に

ALTER TABLE `CollectionVersionBlockStyles`
DROP PRIMARY KEY,
ADD PRIMARY KEY(
`cID`,
`cvID`,
`bID`,
`arHandle`);


をコピペ、実行ボタンを押す

これで、症状が解決するはずです。ロリポップを5.3.3.1から5.4.1.1.1にアップグレードする際にこの症状を確認し、上記の対処をすることにより、エラーを回避しました。