2012-04-09 12 views
8

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

Wo der Dateiname in der documentation steht, muss die CSV-Datei an einem bestimmten Speicherort gespeichert werden oder kann an einem beliebigen Speicherort gespeichert werden.

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

Antwort

15

Es sieht aus wie Sie von Linux und Windows-Datei-Pfad-Notation verwechselt werden. 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 Windows-Notation verwenden, achten Sie darauf, dass Sie Flucht Schrägstriche haben wenn Sie nicht standard_conforming_strings = on verwenden - dies ist die Standardeinstellung in der aktuellen Version 9.1 ist jedoch nicht in älteren Versionen. So geht's:

COPY data_table from E'C:\\tmp\\outputdata.csv' WITH ... 

Funktioniert auf jeden Fall.
Mit standard_conforming_strings = on könnte man auch schreiben:

COPY data_table from 'C:\tmp\outputdata.csv' WITH ... 

Beachten Sie, dass ein PostgreSQL Windows-Server-Standardpfad Schreibweise mit Schrägstrichen statt Schrägstrichen auch versteht.

Für SQL COPY FROM/TO können Sie einen beliebigen Pfad verwenden, den der Besitzer des Servers (postgres standardmäßig) Lese-/Schreibberechtigung hat.

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

+0

Vielen Dank für die Erklärung. – Jeiman

+0

Verwenden Sie nicht den Befehl COPY mit pgAdmin auf einem Windows-Computer und versuchen Sie, eine Datei von Ihrer lokalen Windows-Umgebung zu lesen. Dies wird fehlschlagen. Sie können eine CSV-Datei trotzdem importieren. Verwenden Sie dazu die GUI. Klicken Sie mit der rechten Maustaste auf die gewünschte Tabelle und wählen Sie den Import ... – R13e

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.

Halten Sie die Aufmerksamkeit nur auf die Tatsache, dass auf Windows müssen Sie den umgekehrten Schrägstrich auf diese Weise entkommen:

copy data_table from 'c:\\Temp\\outputdata.csv' WITH DELIMITER AS ',' CSV QUOTE AS '"';