Ich versuche, eine CSV-Datei über den Befehl "COPY" in eine Datenbank zu importieren. Ich erhalte jedoch den (was häufig vorkommt) Fehler, dass ich ein Superuser sein muss und stattdessen "\ copy" verwenden sollte. Bei Verwendung von \ copy wird jedoch ein Syntaxfehler angezeigt:
ERROR: syntax error at or near "\"
LINE 1: \copy
Das Caret zeigt auf "\". Hier ist meine Frage:
\copy tablename(column2, column3, column4, column5) from '/home/uploads/data.csv' WITH DELIMITER ',' CSV HEADER'
Ich habe sowohl "copy" als auch "\ copy" ausprobiert. Der erste gibt mir einen Superuser-Fehler, der zweite gibt mir diesen Syntaxfehler. Irgendeine Idee, wie man das Problem behebt? Bring es zum Laufen?
Ich führe den Befehl über das SQL-Eingabefeld von myPgAdmin aus.
Die einzige andere Frage, die ich habe, betrifft den Import der Spalten über Tabellennamen (Spalte2, Spalte3 usw.). Ist das die richtige Syntax dafür?
quelle
Informationen zum KOPIEREN finden Sie im Postgres- Handbuch .
In pgAdmin (oder der SQL-Zeichenfolge, die Sie über ein Skript oder eine andere Datenbankverbindung übergeben) würden Sie nur COPY ohne das Präfix "\" verwenden.
Geben Sie also etwas ein wie:
COPY tablename....
Sie müssen sicherstellen, dass Sie über die entsprechenden Berechtigungen zum Ausführen des Befehls verfügen. In diesem Fall müssen Sie sich in der Datenbank anmelden und Schreibzugriff auf 'Tabellenname' haben. Postgres muss auch in der Lage sein, auf die Datei zuzugreifen, damit auf dem Datenbankserver auf den Pfad / home / uploads / zugegriffen werden kann und der Benutzer von postgres die Datei lesen kann - überprüfen Sie die Berechtigungen für die Datei und das Verzeichnis.
quelle
Auf meinem 9.1-System ist der Fehler, den ich bekomme, ziemlich informativ:
Wenn Sie den Hinweis noch einmal sorgfältig lesen, können Sie ihn von stdin kopieren. Dies ist, was \ copy in psql im Backend tatsächlich tut. Weitere Informationen finden Sie in den Dokumenten unter http://www.postgresql.org/docs/8.3/static/sql-copy.html .
Sie könnten dann den Textkörper der Kopie in Ihre Abfrage einfügen, oder zumindest funktioniert dies in psql so.
quelle
So mache ich das in pgAdmin3. Aber überprüfen Sie die Benutzerrechte sorgfältig, manchmal sind die Rechte das Problem. (Benutzer postgres auf filename.txt / chmod 777)
quelle
Eine andere Methode besteht darin, eine Ansicht für die SQL-Abfrage zu erstellen. Verwenden Sie dann den Befehl \ copy.
quelle