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.
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