Migration fehlgeschlagen beim Upgrade auf die neueste Version von vor ~3 Wochen

1 Migration fehlgeschlagen!

Migration von Standard fehlgeschlagen
#<StandardError: Ein Fehler ist aufgetreten, alle nachfolgenden Migrationen wurden abgebrochen:

PG::UniqueViolation: FEHLER:  doppelter Schlüsselwert verletzt eindeutige Beschränkung „index_user_emails_on_email“
DETAIL:  Schlüssel (lower(email::text))=(talk@remobjects.com<mailto:talk@remobjects.com) existiert bereits.

/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: migrating ====================
-- 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")
Migrating secondsite
Docker Manager: FAILED TO UPGRADE
#<RuntimeError: RuntimeError>

Weiß jemand, was ich tun kann, um das zu überwinden?

Oh … das haben wir schon einmal bei größeren PG-Versionsupgrades gesehen. @saj hat kürzlich an etwas hier gearbeitet.

Die lange Geschichte ist, dass sich bei einigen PG-Upgrades die DB-Kollation unter Ihnen ändert und Sie aufgrund von libc, die Dinge ändert. Sie haben keine andere Wahl, als neu zu indizieren.

Was Ihnen passiert ist:

  1. Sie haben ein großes Upgrade durchgeführt
  2. Ihr Index ist etwas beschädigt worden
  3. Eine zweite Einfügung eines Benutzers für talk@remobjects.com wurde vorgenommen - Sie haben jetzt eine doppelte Zeile, obwohl der Index dies nicht zulässt.
  4. Wir berühren die Zeile und das hebt dieses Problem hervor, da es eine nicht verwandte Spalte nicht aktualisieren kann.

Behebung:

  • Finden Sie die Benutzer-IDs der 2 Benutzer, die sich die E-Mail talk@remobjects.com teilen.
  • Löschen Sie entweder die E-Mail auf einem von ihnen oder benennen Sie sie um.
  • Fahren Sie wie geplant fort.
  • Führen Sie dringend eine vollständige DB-Neuindizierung durch, um andere Probleme zu erkennen.

Ihre Lösung hat das Problem zwar gelöst, aber das „Upgrade“ ist bereits abgeschlossen (und es gibt keine weiteren Updates). Muss ich etwas Besonderes tun, um diese Migrationen erneut auszuführen? Ich habe natürlich die doppelten E-Mails gelöscht.

Ja, stellen Sie sicher, dass Sie einen db reindex ausführen

Versuchen Sie:

REINDEX DATABASE VERBOSE

Es ist entscheidend, dass Sie dies tun, um sicherzustellen, dass Ihre Indizes in gutem Zustand sind.

1 „Gefällt mir“

Gibt es eine Möglichkeit, von Zeit zu Zeit zu überprüfen, ob ein Forum „gesund“ ist, bevor man auf ein solches Problem stößt?

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