Tabelle aus externer Quelle importieren

Ludwigmller

SQL-Guru
Beiträge
171
Moin,
ich muss in regelmäßigen Abstand Daten einer Tabelle aus einer externen Quelle aktualisieren. Diese liegt als CSV vor und hat leider keine ID-Spalte. Da die vorherigen Tupel, bereits per Fremdschlüssel referenziert worden sein können, kann ich nicht einfach die Tabelle leeren und die Daten einfügen. Ein Großteil der neuen Daten, liegen bereits in der Tabelle vor.
Wie könnte ich möglichst einfach vorgehen?

Gruß
Ludwig
 
Werbung:
Mit COPY kannst Du CSV einlesen, dabei kannst Du auch die id-Spalte ausklammern.

Code:
postgres=# create table ludwigmller(id int generated always as identity primary key, data text);
CREATE TABLE
postgres=# insert into ludwigmller (data) values ('das ist schon bekannt');
INSERT 0 1
postgres=# copy ludwigmller (data) from stdin;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself, or an EOF signal.
>> das ist neu
>> \.
COPY 1
postgres=# select * from ludwigmller;
 id |         data          
----+-----------------------
  1 | das ist schon bekannt
  2 | das ist neu
(2 rows)

postgres=#

Mit PG15 kommt auch noch MERGE, was weitere coole Dinge ermöglichen wird.
 
Wie kann ich verhindern, dass doppelte Tupel erstellt werden? Es sind ein Großteil der Tupel bereits in der Tabelle vor dem Aktualisieren bekannt. Es kommen einige neue dazu. Noch problematischer ist natürlich, wenn sich nur ein einzelnes Attribut ändert. Es gibt mindestens zwei Attribute die sich nicht verändern. Anhand davon könnte man identifizieren...
 
Werbung:
Definiere doppelt. Doppelter PRIMARY KEY? Das verhindert die DB selber. Unterschiedlicher PK, aber im einem anderen Feld gleich? UNIQUE CONSTRAINT. Unter Umständen erst einmal aus CSV in eine Zwischentabelle und aus dieser via INSERT ... ON CONFLICT ...
 
Zurück
Oben