PG13-KompatibilitĂ€tsproblem đŸ”„

Worum geht es hierbei?

Diese Migration fĂŒhrt NULL NOT DISTINCT fĂŒr einen Index in der Tabelle problem_check_trackers ein. DEV: Fix problem check tracker unique index not respecting NULLs by Drenmi · Pull Request #29169 · discourse/discourse · GitHub

Was ist das Problem?

StandardmĂ€ĂŸig betrachtet PostgreSQL beim ÜberprĂŒfen der Eindeutigkeit eines Tupels zur Durchsetzung eines eindeutigen Indexes NULL-Werte als unterschiedliche Werte. Aus diesem Grund könnten wir aufgrund von Race Conditions fĂ€lschlicherweise mehrere EintrĂ€ge mit { identifier: \"rails_env\", target: nil } erstellen. Dies wĂŒrde dann zu Fehlern zur Laufzeit fĂŒhren.

Wie löst dies das Problem?

Löschen Sie den vorhandenen Index und erstellen Sie ihn mit der Option NULLS NOT DISTINCT neu.

Problem

NULLS NOT DISTINCT wurde jedoch eingefĂŒhrt in Postgres 15 beta2. Die aktuelle Postgres-Version bei einer Standardinstallation ist Postgres 13 und diese unterstĂŒtzt diese Funktion nicht.

Konsequenzen

  • Diese Änderung hat keine Auswirkungen auf PG13, da NULLS NOT DISTINCT ignoriert wird (Quelle).
  • Der Versuch, ein Backup von einem PG15-Server auf einem PG13-Server wiederherzustellen, schlĂ€gt mit der folgenden Fehlermeldung fehl:
ERROR:  syntax error at or near "NULLS"
LINE 1: ...m_check_trackers USING btree (identifier, target) NULLS NOT ...
^
EXCEPTION: psql failed:                                                              ^
/var/www/discourse/lib/backup_restore/database_restorer.rb:92:in `restore_dump'

(vollstÀndige Zeile: CREATE UNIQUE INDEX index_problem_check_trackers_on_identifier_and_target ON public.problem_check_trackers USING btree (identifier, target) NULLS NOT DISTINCT;)

@tgxworld @drenmi

9 „GefĂ€llt mir“

@drenmi Sieht so aus, als mĂŒssten wir die Migration rĂŒckgĂ€ngig machen und eine andere Lösung in Betracht ziehen. Dies verursacht wahrscheinlich Fehler bei selbst gehosteten Installationen.

8 „GefĂ€llt mir“

Ich habe hier einen PR, der auch fĂŒr PG13 funktionieren sollte. :pray:

Wir ĂŒberlegen noch, wie realistisch dieser Fall in der Praxis ist und wie viel wir investieren sollten, um ihn zu umgehen. :pray:

1 „GefĂ€llt mir“

Nun, ich kann nicht fĂŒr andere sprechen und ich weiß nicht, ob ich wirklich reprĂ€sentativ bin (wahrscheinlich nicht), aber ich bin ihm zweimal innerhalb von 3 Tagen nach dieser Änderung begegnet


Daher wĂ€re eine Umgehung (und RĂŒckgĂ€ngigmachung!) sehr willkommen.

1 „GefĂ€llt mir“

Da wir jetzt die Problemumgehung haben, die auch bei PG15 funktionieren sollte, sollten wir NULLS NOT DISTINCT entfernen können.

Aus reiner Neugier, was haben Sie getan, dass die Wiederherstellung eines PG15-Backups auf PG13 notwendig war? :slightly_smiling_face: (Das hat keine Auswirkungen auf die obige Aufgabe, ich versuche nur, so gut wie möglich zu verstehen, was „in freier Wildbahn“ passiert.)

1 „GefĂ€llt mir“

Wir hatten einen Kunden, der versuchte, ein Backup wiederherzustellen (ich glaube, er war selbst gehostet und hatte Dinge versucht, die ĂŒber sein Wissen hinausgingen :upside_down_face:), und wir hatten einen anderen Kunden, der uns bat, eine Staging-Site fĂŒr die Entwicklung benutzerdefinierter Plugins einzurichten, und wir haben ein Backup von CDCK-Hosting ĂŒbernommen.

Im Allgemeinen funktioniert der integrierte Versionierungsmechanismus in den Backup-Metadaten sehr gut, um proaktiv festzustellen, ob etwas explodieren wird oder nicht, aber diese Art von Situationen* sind wie Minenfelder :slight_smile:

(* TatsĂ€chlich ist das Einzige, was mir sonst noch einfĂ€llt und nicht von der Migrationsversionierung abgedeckt wird, wenn eine Migration mit einem Ă€lteren Zeitstempel in den Main-Branch eingefĂŒgt wird, aber das schweift ab)

3 „GefĂ€llt mir“

Danke fĂŒr die Infos @RGJ! :pray:

Der PR zum Entfernen der NULLS NOT DISTINCT OPTION ist da:

3 „GefĂ€llt mir“

Ich kann sehen, dass das Problem bereits behoben ist, aber um eine Erfahrung aus der Praxis hinzuzufĂŒgen: Ich hatte dieses Problem, als ich versuchte, ein Backup, das auf einer Discourse-gehosteten Instanz erstellt wurde, auf einen Dev-Container wiederherzustellen, den ich lokal mit Docker eingerichtet hatte, als Teil der Einrichtung einer Entwicklungsumgebung. Anscheinend lĂ€uft Discourse Hosting PG 15, aber die Entwicklungsumgebung ist 13?

2 „GefĂ€llt mir“

Ja, das ist die Wurzel des Problems. Wir mĂŒssen unseren Open-Source-Container auf 15 aktualisieren. Wir werden uns in den nĂ€chsten Monaten darum kĂŒmmern.

4 „GefĂ€llt mir“

Dieses Thema wurde nach 9 Tagen automatisch geschlossen. Neue Antworten sind nicht mehr möglich.