最新への移行に失敗しました。約3週間前のバージョンからです

1 件のマイグレーションが失敗しました!

デフォルトのマイグレーションに失敗しました
#<StandardError: エラーが発生しました。以降のすべてのマイグレーションはキャンセルされました:
PG::UniqueViolation: エラー:  重複キーの値は一意制約「index_user_emails_on_email」に違反しています
詳細: キー (lower(email::text))=(talk@remobjects.com<mailto:talk@remobjects.com>) は既に存在します。
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.3/lib/patches/db/pg.rb:110:in `exec'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.3/lib/patches/db/pg.rb:110:in `async_exec'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql/database_st

== 20211201221028 MigrateEmailToNormalizedEmail: マイグレーション中 ====================
-- execute("UPDATE user_emails\nSET normalized_email = REPLACE(REGEXP_REPLACE(email,'([+@].*)',''),'.','') || REGEXP_REPLACE(email, '[^@]*', '')\nWHERE (normalized_email IS NULL OR normalized_email <> (REPLACE(REGEXP_REPLACE(email,'([+@].*)',''),'.','') || REGEXP_REPLACE(email, '[^@]*', '')))\n  AND (id >= -2 AND id < 7155)\n")
セカンドサイトをマイグレーション中
Docker Manager: アップグレードに失敗しました
#<RuntimeError: RuntimeError>

これを乗り越えるために何かできることはありますか?

以前、PGのメジャーバージョンアップで同様の事象を確認しています。@saj が最近この件について対応しました。

長くなるのですが、一部のPGアップグレードでは、DBの照合順序が内部的に変更され、libcが変更を加えることによって発生します。再インデックス化するしかありません。

今回発生した事象は以下の通りです。

  1. メジャーアップグレードを実行した
  2. インデックスが破損した
  3. 2番目のユーザー talk@remobjects.com の挿入が行われた - インデックスがこれを許可しないにもかかわらず、重複行が発生した。
  4. 行に触れると、無関係な列を更新できないため、この問題が浮き彫りになる

修正方法は以下の通りです。

  • talk@remobjects.com のメールアドレスを共有している2人のユーザーのIDを特定する。
  • どちらか一方のメールアドレスを削除または変更する。
  • 予定通り進める。
  • 他の問題を検出するために、緊急でDB全体の再インデックス化を行う。

解決策は問題の解決に役立ちましたが、「アップグレード」はすでに(これ以上更新はありません)完了しています。これらのマイグレーションを再度実行するために何か特別なことをする必要がありますか?もちろん、重複したメールは削除しました。

はい、db reindex を実行してください。

以下を試してください。

REINDEX DATABASE VERBOSE

インデックスがすべて正常であることを確認するために、これは非常に重要です。

「いいね!」 1

フォーラムが「健全」かどうかを時々チェックする方法はありますか?このような問題が発生する前に。

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.