PostgreSQL Workarounds Daten importieren

edit | delete

Autor: Ingmar Pforr

eingetragen: Dienstag, 24. August 2010 um 17:02 Uhr (34/2010 Kalenderwoche)

geändert: Freitag, 10. September 2010 um 16:30 Uhr (36/2010 Kalenderwoche)

Keywords: PostgreSQL Foreign Key Constraints trigger

Kategorien: DB: PostgreSQL,

Text:

Problem: Daten in bestehende Struktur importieren klappt nicht wegen Foreign Key Constraints.


Lösung 1:
Struktur exportieren als PLAIN Skript,
neue DB anlegen mit diesem Skript, aber nur bis vor der Stelle ALTER TABLE ... ADD CONSTRAINT ... PRIMARY KEY bzw. FOREIGN KEY,
vorhandene Daten importieren,
Rest des Struktur-Skripts ausführen


in englisch
1. Create a schema with all constraints etc.
2. Dump this empty database with pgdump with default options to
empty
database.sql.
3. Split emptydatabase.sql file to 2 files - tables.sql and
constraints.sql - all constraints will be at the end of empty
database.sql
4. drop database, create empty one, import tables.sql, import your
data-only backup, import constraints.sql.
[http://archives.postgresql.org/pgsql-general/2008-09/msg00928.php]



Lösung 2:
[http://www.postgresql.org/files/documentation/books/pghandbuch/html/app-pgdump.html]
pg_dumb mit Option
--disable-triggers


Diese Option ist nur von Bedeutung, wenn Sie nur die Daten, nicht das Schema, sichern. Sie weist pg_dump an, Befehle auszugeben, welche Trigger für die Zieltabellen vorübergehend ausschalten, während die Daten geladen werden. Verwenden Sie diese Option, wenn Sie Fremdschlüssel oder andere Trigger für die betroffenen Tabellen haben, die Sie bei der Wiederherstellung nicht aktiv haben wollen.


Gegenwärtig müssen die für --disable-triggers ausgegebenen Befehle als Superuser ausgeführt werden. Sie sollten also mit -S einen Superusernamen angeben, oder besser noch --use-set-session-authorization verwenden und dann das erzeugte Skript als Superuser starten. Wenn Sie weder die eine noch die andere Option angeben, dann muss das gesamte Skript als Superuser ausgeführt werden.


Diese Option ist nur für das reine Textformat von Bedeutung. Bei den anderen Formaten können Sie diese Option angeben, wenn Sie pg_restore ausführen.



Lösung 3:
Nicht PLAIN TEXT exportieren, sondern TAR etc.
Import mit pg_restore und entsprechender disable triggers-Option



Lösung 4:
Die Insert-Statements entsprechend den Tabellen-Abhängigkeiten umsortieren. Viel Spaß :)