insert bzw. copy

Hallo,

Ich suche nach einer möglichkeit, Daten in eine vorhandene Tabelle zu übertragen. Primär geht es um die geschwindigkeit Daten einzutragen.

Ich nutzte Postgres 8.2.4 auf einem Suse Rechner.


wenn meine Tabelle leer ist, ist der copy Befehl wesentlich schneller als insert.

Wenn Daten in der Tabelle vorhanden sind und ich einen Datensatz ein weiteres mal mit copy hinzufüge, kommt es zu einem verletzt Unique-Constraint.

gibt es eine möglichkeit, trotz Exception, die Daten einzufügen?
Das abfangen von Exceptions (wie in einer Insert Funktion) bringt mich leider nicht weiter.

Gibt es eine option, oder eine Möglichkeit, dass die DB einträgt? eingetragen wird?

Vielen Dank
Thorsten

Hallo Thorsten,

das ist evt. ein bisschen ungenau, was du da schreibst…

1.) Wenn auf einer oder mehreren Spalten der Tabelle, in die die Datensätze eingetragen werden sollen, UNIQUE Constraints liegen, dann werden die vermutlich ihren Sinn haben. Falls nicht, könntest du diese Constraints natürlich löschen. :rolleyes:

2.) Wenn alle Datensätze, die schon in der Tabelle vorhanden sind, (genauso) wieder eingetragen werden sollen, dann könntest die Tabelle vorher natürlich versuchen, vorher zu leeren. Unter Umständen würde das aber mehr oder weniger massive Nebenwirkungen auf andere Tabellen haben, falls deren Inhalte von denen der hier betrachteten Tabelle abhängen. Evt. wird das Löschen verweigert oder z.B. Datensätze in den abhängenden Tabellen gelöscht - je nachdem wie deren CONSTRAINTS definiert sind. Das wäre vermutlich unerwünscht! :frowning:

3.) Du könntest eine neue Tabelle anlegen, die genauso aussieht, wie die eigentliche Zieltabelle. Dort kannst du die Daten per COPY einlesen, um sie anschliessend per INSERT inkl. ads’ Avoid Unique Key violation :sunglasses: in deine Zieltabelle zu überführen.

4.) COPY bietet nach Doku scheinbar keine Optionen, sondern ballert munter drauf los - bis das DBMS es aufhält, weil ein Fehler aufgetreten ist. :frowning:

5.) Ist vielleicht nicht das was du hören - äh, lesen - wolltest :wink: , aber vielleicht findet sich ja noch jemand anderes, der 'nen Trick hat :confused: .

CU
Fröstel

Ja. MySQL.

Andreas