PG_restore hängt

Hi,
bin gerade am umziehen.
Habe ein komplettes Backup einer DB von Postgres7.4 erstellt und versuche diese in eine neue DB von Postgres 8.1 einzuspielen.

Das klappt eigentlich auch, nur das dieser immer bei einer bestimmten Tabelle hängen bleibt und das ohne Fehlermeldungen. Verbose ist an.
Die Tabelle selbst hat keine Macken, habe mehrfach REINDEX, VACUUM, usw gemacht. Die Tabellen sind in Ordnung, aber die resotre hängt.

Alle andere Tabellen vor dieser sind korrekt gefüllt. Sogar Tabellen mit 1 Mio. Einträgen gingen flott, aber diese eine mit ungefähr 515000 Einträgen hängt. Zumindest sehe ich das daran das ich in PGAdmin alle Tabellen befüllt sehe aber diese eine und ihre folgenden leer sind, somit müsste pg_restore an dieser Tabellen hängen.

Woran könnte das liegen? Was kann ich da machen?

Vielleicht habe ich eine Fehlerquelle. Aber das scheint irgendwie doof zu sein.

Ich kriege Meldungen über Verletzungen der ForeignKey Constraints.
Ich habe Tabellen mit Fremdschlüsseln, und das einfügen in diese Tabelle klappt nicht weil angeblich die Spalte, die als Fremdschlüssel agiert, in seiner Ursprungstabelle nicht existiert. Aber diese Spalte existiert und ist als Primärschlüssel drin.

Was geht hier vor?

pg_restore: FEHLER:  Einfügen oder Aktualisieren in Tabelle »affiliates_clients« verletzt Fremdschlüssel-Constraint »affiliates_clients_campaign«
DETAIL:  Schlüssel (campaign_id)=(4) ist nicht in Tabelle »campaign« vorhanden.
pg_restore: [Archivierer (DB)] Fehler in PQendcopy: FEHLER:  Einfügen oder Aktualisieren in Tabelle »affiliates_clients« verletzt Fremdschlüssel-Constraint »affiliates_clients_campaign«
DETAIL:  Schlüssel (campaign_id)=(4) ist nicht in Tabelle »campaign« vorhanden.
pg_restore: *** abgebrochen wegen Fehler

Die Spalte id ist als Primärschlüssel in campaign drin. Und campaign_id ist in der affiliates_clients auch drin.

Erste Frage: mit welchem Tool hast du den Dump aus der 7.4 Datenbank gezogen?

Wenn es pg_dump war, mit welcher Version von pg_dump?

Wilde Vermutung: in pg_dump - Versionen von 8.x kann es zu einem Fehler kommen: die Reihenfolge von Objekten im Dump ist falsch. So kann es passieren, daß die Tabelle ‘campaign’ bei Dir erst nach der ‘affiliates_clients’ im Dump steht. Dann knallt es natürlich.

Abhilfe: den Dump mit der höheren Version erzeugen (ads deutete dies ja auch schon an) oder aber sich die man-page zu pg_restore durchlesen: es gibt eine Möglichkeit, die Reihenfolge der Objekte festzulegen, beachte dazu die Optionen -l und -L.


Andreas

akretschmer: du meinen “pg_dump Versionen vor 8.x” :wink:

Das mit dem Umsortieren der Objekte funktioniert nur, wenn man das “custom” Format gewählt hat.

Ja und ja.

Falls der Dump als Text vorliegt, kann er aber mal schauen, ob meine Vermutung stimmt. Und falls ja: gerüchte besagen, es gäbe Texteditoren, wo man ganze Textbklöcke verschieben kann…


Andreas

Also ich habe mittlerweile alle Tabellen kopieren können bis auf eines. Bei diesem einen hängt er einfach ohne aber wirklich irgendwie abzustürzen. Nicht ein Datensatz wird kopiert.

Ich benutze übrigens den pg_dump von 8.1 aber greife übers Internet auf den alten 7.4 zu. Das klappt super und geht flott, da beide Server im gleichen Rechenzentrum sind.

Mir macht jetzt nur diese eine Tabelle ein Problem. Was könnte ich tun um das Problem zu lösen?

PS: Aus irgendeinem Grund habe ich per pg_dump dbname | gzip > name.gz und pg_restore diese Foreign Key Sache umgehen können, ist alles korrekt drin. Wie auch immer.

Mache auf der alten Kiste ein COPY table in eine CSV-Datei und auf der neuen Kiste ein COPY aus dieser Datei in die Tabelle. Das sollte gehen.

Andreas

Arrgh. Das lag daran das ein CHECK CONSTRAINT in der Tabelle war, die geprüft hat ob ein Feld in der Tabelle leer ist.

Aus irgendeinem Grund hat das wohl Ewigkeiten gebraucht.
Hab das weggemacht und der Import ging flott.

Danke nochmal Jungs. :smiley:

akretschmer: Rechnung!

Rechnung für Tyvan aus dem Forum