COPY-Funktion in PostgreSQL

8

Ich möchte die COPY-Funktion in PostgreSQL verwenden, um eine CSV-Datei in eine PostgreSQL-Datenbank zu importieren.

Wo der Dateiname in der Dokumentation steht, muss die CSV-Datei dies tun an einem bestimmten Ort gespeichert oder an einem beliebigen Ort gespeichert werden.

Zum Beispiel copy data_table from '/tmp/outputdata.csv' WITH DELIMITER AS ',' CSV QUOTE AS '"'; . Wo heißt tmp , bedeutet das den tmp-Ordner im Laufwerk C:. Kann es zu einem anderen Ordnernamen geändert werden?

    
Jeiman 09.04.2012, 20:49
quelle

2 Antworten

15

Es sieht so aus, als ob Sie von Linux vs. Windows-Dateipfadnotation verwirrt sind. Was Sie dort haben, ist ein Linux-Pfad, der in root verankert ist. Windows verwendet Laufwerksbuchstaben - die Sie auch unter Windows angeben können.

Wenn Sie die Windows-Notation verwenden, müssen Sie Backslashes zurückgeben, wenn Sie nicht standard_conforming_strings = on - das ist der Standard in der neuesten Version 9.1, aber nicht in älteren Versionen. So:

%Vor%

Funktioniert auf jeden Fall.
Mit standard_conforming_strings = on könntest du auch schreiben:

%Vor%

Beachten Sie, dass ein PostgreSQL-Windows-Server auch die Standardpfadnotation mit Schrägstrichen anstelle von Backslashes versteht.

Für SQL COPY FROM / TO können Sie einen beliebigen Pfad zum Eigentümer des Servers verwenden process ( postgres standardmäßig) hat die Berechtigung zum Lesen / Schreiben.

Beachten Sie, dass für den Meta-Befehl \copy des psql-Clients die Berechtigungen gelten des aktuellen lokalen Benutzers gelten.

    
Erwin Brandstetter 09.04.2012, 21:04
quelle
5

Ja, natürlich können Sie den Ort angeben, an dem Sie Lesezugriff haben. Es ist kein Problem, den Pfad der Datei zu ändern.

Achten Sie nur auf die Tatsache, dass Sie auf Windows den Backslash auf diese Weise umgehen müssen:

%Vor%     
aleroot 09.04.2012 20:53
quelle

Tags und Links