Skip to content

誕生日テーブル(db_birthday)UNIQUE 自動移行 ​

参考保存: 本番での自動移行は BirthdaySeedInstaller が担います。現役の一括投入は 誕生日マスタ スロカレ一括投入ガイド を参照し、本ファイルは過去の移行内容確認と緊急時の補助資料として扱ってください。

wp_db_birthday に UNIQUE(month, day, chara, divi, title_id) を適用します。誕生日シード(URL 指定取得)の重複スキップ方針に合わせ、同一の「月・日・キャラ名・区分(声優名含む)・作品名マスタ ID」が重複した場合のみスキップし、月日や作品名が異なる同名キャラは別エントリとして登録できます。

作品名は文字列列 title ではなく、汎用マスタ db_title_master の title_id で参照します(Issue #3716)。

自動移行 ​

フロントの誕生日 JOIN が title_id とマスタに依存するため、TitleMasterInstaller → BirthdaySeedInstaller → BirthdayKishuInstaller は WordPress init(priority 0) でも ensure されます(管理画面未訪問でも公開ショートコードが動くようにする)。併せて AdminDatabaseInstaller::ensure_all()(admin_init)からも冪等に呼びます。

既存テーブルがある環境では、次を順に行います。

  1. db_title_master を作成(未作成なら)
  2. db_birthday に title_id を追加し、DISTINCT title をマスタへ upsert → バックフィル
  3. 旧 UNIQUE(例: (chara, divi) や (month, day, chara, divi, title))を DROP
  4. 目標 UNIQUE (month, day, chara, divi, title_id) 追加前に重複行を解消(id 最小を残す)
  5. 文字列 title 列を DROP(title_id IS NULL OR 0 が残る場合は中止)
  6. db_birthday_kishu も同様に title → title_id へ移行し、UNIQUE(title_id, kishu_id) を追加
  • コード: core_src/Infrastructure/Database/TitleMasterInstaller.php / BirthdaySeedInstaller.php / BirthdayKishuInstaller.php
  • 登録: ConstantsServiceProvider の init、および AdminDatabaseInstaller::ensure_all()

手順 ​

  1. 本番・ステージングにテーマをデプロイする
  2. 公開ページまたは管理画面に 1 回アクセスする(init で Installer が走る)
  3. 必要に応じて誕生日シード管理画面で動作確認する(誕生日マスタ スロカレ一括投入ガイド)

運用前提: 移行はリクエスト時の Installer で完結します。手動 SQL は不要です。

確認・トラブルシュート ​

  • インデックス: SHOW INDEX FROM wp_db_birthday; で uk_birthday_month_day_chara_divi_title_id(列: month, day, chara, divi, title_id)が 1 本だけであること
  • 列: title が無く title_id があること。wp_db_title_master が存在すること
  • ログ: PHP エラーログの [BirthdaySeedInstaller] / [BirthdayKishuInstaller] / [TitleMasterInstaller] を参照
  • 移行が途中で止まった場合: 再度アクセスして再試行(birthday_seed_db_version / birthday_kishu_db_version / title_master_db_version が目標スキーマ到達まで更新されない限り再実行される)
  • db_birthday_kishu の重複削除: 既存の AUTO_INCREMENT 列(例: レガシー id)があればそれを行識別に使い、無い場合のみ一時列 _mig_dedup_id を追加する。ADD temporary dedup column failed(there can be only one auto column)が繰り返される場合は、デプロイ済みコードがこの分岐を含むか確認する

関連 ​