プロジェクト

全般

プロフィール

Bug(バグ) #2439

完了

1.4.0 で追加されたマイグレートスクリプト (リビジョン番号 9) の実行に失敗することがある

Kousuke Ebihara さんが約13年前に追加. 約13年前に更新.

ステータス:
Fixed(完了)
優先度:
Normal(通常)
担当者:
対象バージョン:
開始日:
2011-09-26
期日:
進捗率:

100%

予定工数:
3.6 で発生するか:
[QA]バグ通知済:
いいえ
3.8 で発生するか:

説明

DB に存在するデータの状態によっては、 #2346 の対応のために追加された 009_change_cascade_diary_comment.php の実行に失敗することがある。

失敗時のエラーメッセージは以下のようになる。

   Error #1 - SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`DBNAME`.<result 2 when explaining filename '#sql-393e_3577b6'>, CONSTRAINT `diary_comment_member_id_member_id` FOREIGN KEY (`member_id`) REFERENCES `member` (`id`) ON DELETE SET NULL). Failing Query: "ALTER TABLE `diary_comment` ADD CONSTRAINT diary_comment_member_id_member_id FOREIGN KEY (member_id) REFERENCES `member`(id) ON DELETE SET NULL" 

このようなエラーが生じる原因として、 diary_comment.member_id カラムに存在しないメンバー ID (たとえば、既に退会してしまったメンバー) が含まれている可能性が考えられる。

  • OpenPNE 2 では、 #2346 で説明しているように、メンバー退会時に日記コメントに紐付くメンバー ID が空になる (NULL に置き換わる)
  • OpenPNE 3 では、 #2346 の修正前ではメンバー退会時に日記コメントが削除されていた。 #2346 の修正後は OpenPNE 2 と同じ挙動になった
  • ただし、 OpenPNE 2 は OpenPNE 3 と違い外部キー制約を使用していないため、退会者の日記コメントのうち、メンバー ID が空になっていないレコードが存在する可能性を否定できない。 OpenPNE 2 から OpenPNE 3 へのアップグレードは外部キー制約を一時的に無効にしておこなうため、 diary_comment_member_id_member_id の制約に違反するレコードは OpenPNE 3 に存在しうる

関連するチケット 3 (1件未完了2件完了)

関連している opDiaryPlugin - Bug(バグ) #2448: 存在しないmemberが書いた日記が存在する場合にマイグレートに失敗するNew(新規)2011-09-29

操作
関連している opDiaryPlugin - Bug(バグ) #2472: 1.4.0.1 で修正されたマイグレートスクリプト (リビジョン番号 9) の実行に失敗することがあるInvalid(無効)2011-10-06

操作
関連している opDiaryPlugin - Bug(バグ) #2346: 退会時にそのメンバーが書いた日記コメントも削除されてしまうFixed(完了)Maki Takahashi2011-08-11

操作

他の形式にエクスポート: Atom PDF