Danke, dass Sie sich die Zeit genommen haben, meine Frage zu lesen.
Ich habe eine Django-App mit dem folgenden Modell:
%Vor%In einer Ansicht:
%Vor%Alles funktioniert gut, außer dass die Postgres Logs voll mit doppelten Schlüsselfehlern sind:
%Vor%Versuchte andere Lösung, z. B.
%Vor%Das hilft nur für MySQL? Kann jemand die doppelten Schlüsselwertfehler für postgres avaid?
Hatten Sie irgendwann einmal unique = True in Visits Profilfeld?
Es sieht so aus, als ob es eine einzigartige Einschränkung für Postgres gibt, die noch in Kraft ist. "table_visit_profile_id_key" ist der Name, der automatisch generiert wird, und würde natürlich diese Fehler verursachen, wenn Sie mehrere Besuche für einen Benutzer aufzeichnen.
Wenn dies der Fall ist, verwenden Sie South , um Ihre Datenbankänderungen zu verwalten? Wenn Sie nicht sind, greifen Sie es!
Ein weiterer möglicher Grund für diese Fehler in get_or_create()
ist die fehlende Übereinstimmung der Datentypen in einem der Suchfelder - z. B. die Übergabe von False
anstelle von None
in ein Feld, für das keine Werte zulässig sind. Das .get()
in% .get_or_create()
findet es nicht und Django wird mit der Erstellung neuer Zeilen fortfahren - was aufgrund von PostgreSQL-Einschränkungen fehlschlägt.
PostgreSQL verhält sich in einigen subtilen Abfragen etwas anders, was zu IntegrityError
-Fehlern führt, besonders nachdem Sie zu Django 1.6 gewechselt haben. Hier ist die Lösung - Sie müssen jedem fehlgeschlagenen Modell die Option select_on_save
hinzufügen:
Es ist hier dokumentiert: Options.select_on_save
Tags und Links django postgresql