Ich möchte eine CSV-Datei in eine Postgres-Tabelle kopieren. Diese Tabelle enthält ungefähr 100 Spalten, daher möchte ich sie nicht neu schreiben, wenn ich nicht muss.
Ich benutze den \copy table from 'table.csv' delimiter ',' csv;
Befehl, aber ohne eine erstellte Tabelle bekomme ich ERROR: relation "table" does not exist
. Wenn ich eine leere Tabelle hinzufüge, wird kein Fehler angezeigt, aber es passiert nichts. Ich habe diesen Befehl zwei- oder dreimal ausprobiert und es gab keine Ausgabe oder Meldungen, aber die Tabelle wurde nicht aktualisiert, als ich sie über PGAdmin überprüfte.
Gibt es eine Möglichkeit, eine Tabelle mit Headern zu importieren, wie ich es versuche?
postgresql
csv
postgresql-copy
Stanley Cup Phil
quelle
quelle
table
? Sehr verwirrend. Existiert die Tabelle oder möchten Sie sie basierend auf der CSV erstellen? (Sie können nicht)\copy table(column1, column2, ...) from 'table.csv' delimiter ',' csv;
ohne Glück zu tun . Im Idealfall kann die Tabelle nur über die CSV erstellt und die Header in dieser Datei verwendet werden.Antworten:
Das hat funktioniert. Die erste Zeile enthielt Spaltennamen.
quelle
COPY
Erstellt keine Tabelle oder fügt keine Spalten hinzu, sondern fügt einer vorhandenen Tabelle mit den vorhandenen Spalten Zeilen hinzu. Vermutlich möchte der Fragesteller die Erstellung der ~ 100 Spalten automatisieren undCOPY
verfügt zumindest ab PG 9.3 nicht über diese Funktionalität.ADD
.syntax error at or near "HEADER" LINE 2: delimiter ',' CSV HEADER
bin auf eine Rotverschiebung gekommen.Mit der Python-Bibliothek
pandas
können Sie auf einfache Weise Spaltennamen erstellen und Datentypen aus einer CSV-Datei ableiten.Der
if_exists
Parameter kann so eingestellt werden, dass er eine vorhandene Tabelle ersetzt oder an diese anhängt, zdf.to_sql('pandas_db', engine, if_exists='replace')
. Dies funktioniert auch für zusätzliche Eingabedateitypen, Dokumente hier und hier .quelle
pd.read_excel
stattdessen getippt habepd.read_csv
. Ich habe die Antwort aktualisiert.df.to_sql()
ist SEHR LANGSAM . Um dies zu beschleunigen, können Sie d6tstack verwenden . Es kümmert sich auch um Schemaänderungen.Alternative per Terminal ohne Erlaubnis
Die pg Dokumentation bei NOTES sagen
psql
Wenn Sie also einen Client verwenden oder einen Client verwenden, selbst auf einem lokalen Server, haben Sie Probleme ... Und wenn Sie den Befehl COPY für andere Benutzer ausdrücken, z. Bei einer Github README wird der Leser Probleme haben ...Die einzige Möglichkeit, den relativen Pfad mit Clientberechtigungen auszudrücken , ist die Verwendung von STDIN .
wie hier erinnert :
quelle
Ich benutze diese Funktion seit einiger Zeit ohne Probleme. Sie müssen nur die Nummernspalten in der CSV-Datei angeben, und es werden die Headernamen aus der ersten Zeile übernommen und die Tabelle für Sie erstellt:
quelle
set schema 'data';
, was für Sie der Fall istSie können d6tstack verwenden , das die Tabelle für Sie erstellt und schneller als pd.to_sql () ist, da native DB-Importbefehle verwendet werden. Es unterstützt Postgres sowie MYSQL und MS SQL.
Es ist auch nützlich, um mehrere CSVs zu importieren, Datenschemaänderungen zu lösen und / oder mit Pandas (z. B. Datumsangaben) vorzuarbeiten, bevor Sie in db schreiben (siehe unten im Beispielnotizbuch)
quelle