Upgrade fehlgeschlagen PG::UniqueViolation -- konnte keinen eindeutigen Index erstellen "unique_post_links_ccnew"

Ich habe eine Standardinstallation, die beim Upgrade auf 2.8.0.beta2 mit folgendem Fehler scheitert:

PG::UniqueViolation: ERROR:  could not create unique index "unique_post_links_ccnew"

Dies stammt aus:

I, [2021-06-25T18:35:47.756688 #1]  INFO -- : == 20210525112226 RemoveLengthConstrainFromTopicLinkUrl: migrating ============

Es sieht nicht nach einem beschädigten Index aus.

Hilft das hier?

[6] pry(main)> TopicLink.where(url: bad_url).pluck(:id, :topic_id, :post_id, :user_id)
=> [[15733, 14351, 63616, 911], [16131, 14505, 63986, 911], [27141, 14505, 63986, 1152]]

Am Ende habe ich einfach badX an die doppelten URLs angehängt, und dann hat es funktioniert. Mir ist nicht ganz klar, welche Probleme das in Zukunft verursachen könnte…

Viele sogenannte „unmögliche“ Indexkorruptionsfehler in älteren Versionen von Postgres, nach unserer Erfahrung. Sehen Sie das immer noch?

Ich glaube, ich habe es seit dem Upgrade auf pg12 nicht mehr gesehen.

Wir sind bis PG13 gegangen, und ich glaube, das hat es für uns größtenteils gelöst (beschädigte Indizes) @sam?

@saj hat dieses Problem gelöst. Wir haben es in unserer Infrastruktur behoben. Die meisten Self-Hosters haben es inzwischen umgangen.

Der Mechanismus, den wir in der Vergangenheit zum Upgrade von PG in unserem Open-Source-Image verwendet haben, hatte einige inhärente Sicherheitsprobleme, da sich die libc zwischen den PG-Versionen im Hintergrund geändert hat.

Ich denke, das Problem ist jetzt im breiteren Ökosystem größtenteils verschwunden, obwohl einige alte Upgrades möglicherweise immer noch damit konfrontiert sind. Es wird ein Albtraum sein, unser bestehendes Open-Source-Upgrade-Skript zu reparieren und die enorme Matrix von PG-Upgrades zu bewältigen.

Dafür sind wir uns der Ursache des Problems jetzt sehr bewusst und besser aufgestellt, um es in Zukunft anzugehen.