2017-04-26 5 views
0

Mein Anwendungsfall ist folgender: Ich habe Daten aus einer CSV-Datei und ich muss es in eine Tabelle laden (so weit so gut, nichts neues hier). Es kann passieren, dass dieselben Daten mit aktualisierten Spalten gesendet werden. In diesem Fall möchte ich versuchen, im Falle von Duplikaten einzufügen und zu ersetzen.Ist es möglich, Zeilen mit pgloader einzufügen und zu ersetzen?

Also meine Tabelle ist wie folgt:

CREATE TABLE codes (
    code   TEXT NOT NULL, 
    position_x  INT, 
    position_y  INT 
    PRIMARY KEY (code) 
); 

und eingehende CSV-Datei ist wie folgt:

TEST01,1,1 
TEST02,1,2 
TEST0131,3 
TEST04,1,4 

es, dass irgendwann in der Zukunft passieren könnte ich eine andere CSV-Datei erhalten mit:

TEST01,1,1000 <<<<< updated value 
TEST05,1,5 
TEST0631,6 
TEST07,1,7 

Gerade jetzt, was passiert ist, wenn ich für die erste Datei laufen, alles ist in Ordnung, aber wenn ich e Xecute für die zweite Ich erhalte eine Fehlermeldung:

2017-04-26T10:33:51.306000+01:00 ERROR Database error 23505: duplicate key value violates unique constraint "codes_pkey" 
DETAIL: Key (code)=(TEST01) already exists. 

Ich lade Daten mit:

pgloader csv.load 

Und meine csv.load Datei sieht wie folgt aus:

LOAD CSV 
    FROM 'codes.csv' (code, position_x, position_y) 
    INTO postgresql://localhost:5432/codes?tablename=codes (code, position_x, position_y) 

    WITH fields optionally enclosed by '"', 
      fields terminated by ','; 

Ist das, was Ich versuche mit pgloader möglich zu machen?

Ich habe auch versucht, Einschränkungen für den Primärschlüssel fallen lassen, aber dann am Ende mit doppelten Einträgen in der Tabelle.

Vielen Dank für Ihre Hilfe.

Antwort

1

Nein, das geht nicht. Wie pro reference

To work around that (load exceptions, eg PK violations), pgloader cuts the data into batches of 25000 rows each, so that when a problem occurs it's only impacting that many rows of data.

in Klammern - Mine ...

Das Beste, was Sie tun können, ist zu Tisch Last csv mit gleicher Struktur und dann Daten zusammenführen mit Hilfe der Abfrage (EXCEPT, OUTER JOIN ... where null und so weiter)

+0

Danke für Ihre Antwort! Hier finden Sie einige zusätzliche Informationen vom Autor mit einem alternativen Ansatz, um das gewünschte Ergebnis in der Frage erläutert zu erreichen - https://github.com/dimitri/pgloader/issues/540#issuecomment-297372388 – ktulinho

Verwandte Themen