Deaktivieren Sie die Einschränkungen, bevor Sie pg_restore.exe verwenden


16

Wenn ich versuche, pg_restore.exeeine Speicherauszugsdatei aus einer Datenbank auszuführen , werden Dutzende von Fehlern ausgegeben.

ERROR: insert or update on table "someTable" violates foreign key constraint "aConstraintName"

Dies liegt offensichtlich an der Tatsache, dass ich die Datenbank vor dem Wiederherstellen aus der Sicherungsdatei geleert habe (diese Datei stammt aus einer Produktionsdatenbank) ... dann kann natürlich keine Fremdschlüsselbeschränkung in Ordnung sein, wenn eine referenzierte Tabelle leer ist ...

Gibt es eine Möglichkeit, die Einschränkungen und alle Fremdschlüssel für alle Tabellen zu deaktivieren, bevor ich aufrufe pg_restore.exe, und anschließend die Einschränkungen und Fremdschlüssel wieder zu aktivieren.

In SO habe ich etwas Interessantes gefunden: Verschieben der Einschränkungsüberprüfung, um Zeit festzusetzen . Aber ich glaube nicht, dass ich pg_restore.exevon innen anrufen kann, psql.exenachdem ich die Einschränkungen aufgeschoben habe.

Es gibt auch diesen Beitrag von vor 10 Jahren, der vorschlägt, die Einschränkungen fallen zu lassen und sie dann wieder hinzuzufügen. Oder den Wert von pg_class reltriggers auf 0 zu ändern, und das wäre auch für Einschränkungen möglich ... aber ich fürchte, es ist mehr Hacking als gute Praxis ...

Was raten Sie, was ist in diesem Fall die beste Vorgehensweise? Wird pg_dump.exe mit dem -cleanFlag ein Speicherauszug erstellt, der die Überprüfung der Einschränkungen beim Wiederherstellen der Datenbank umgeht?


Antworten:


28

Haben Sie die --disable-triggersOption ausprobiert pg_restore?

Gemäß der Dokumentation: Verwenden Sie diese Option, wenn Sie referenzielle Integritätsprüfungen oder andere Trigger für die Tabellen haben, die Sie beim erneuten Laden der Daten nicht aufrufen möchten.

Bitte beachten Sie, dass dies nur für eine --data-onlyWiederherstellung gilt und auch die Übergabe der --superuser=usernameOption erforderlich ist .


Und es funktioniert wie ein Zauber ...
Stephane Rolland
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.