Je souhaite copier un fichier CSV dans une table Postgres. Il y a environ 100 colonnes dans ce tableau, donc je ne veux pas les réécrire si je n'ai pas à le faire.
J'utilise la \copy table from 'table.csv' delimiter ',' csv;
commande mais sans table créée je reçois ERROR: relation "table" does not exist
. Si j'ajoute une table vide, je n'obtiens aucune erreur, mais rien ne se passe. J'ai essayé cette commande deux ou trois fois et il n'y avait pas de sortie ou de messages, mais le tableau n'était pas mis à jour lorsque je l'ai vérifié via PGAdmin.
Existe-t-il un moyen d'importer un tableau avec des en-têtes inclus comme j'essaie de le faire?
postgresql
csv
postgresql-copy
Coupe Stanley Phil
la source
la source
table
? Très perturbant. Le tableau existe-t-il ou souhaitez-vous le créer à partir du CSV? (vous ne pouvez pas)\copy table(column1, column2, ...) from 'table.csv' delimiter ',' csv;
sans chance non plus. Idéalement, la table pourrait être créée uniquement via le CSV et utiliser les en-têtes de ce fichier.Réponses:
Cela a fonctionné. La première ligne contenait des noms de colonnes.
la source
COPY
ne crée pas de tableau ni n'y ajoute de colonnes, il ajoute des lignes à une table existante avec ses colonnes existantes. Vraisemblablement, le demandeur veut automatiser la création des ~ 100 colonnes, etCOPY
n'a pas cette fonctionnalité, à partir de PG 9.3 au moins.ADD
données.syntax error at or near "HEADER" LINE 2: delimiter ',' CSV HEADER
sur aws redshift.Avec la bibliothèque Python
pandas
, vous pouvez facilement créer des noms de colonnes et déduire des types de données à partir d'un fichier csv.Le
if_exists
paramètre peut être défini pour remplacer ou ajouter à une table existante, par exempledf.to_sql('pandas_db', engine, if_exists='replace')
. Cela fonctionne également pour les types de fichiers d'entrée supplémentaires, des documents ici et ici .la source
pd.read_excel
au lieu depd.read_csv
. J'ai mis à jour la réponse.df.to_sql()
est TRÈS LENT, pour accélérer cela, vous pouvez utiliser d6tstack . Il prend également en charge les changements de schéma.Alternative par terminal sans autorisation
La documentation pg à NOTES dit
Donc, généralement, en utilisant
psql
ou n'importe quel client, même dans un serveur local, vous avez des problèmes ... Et, si vous exprimez la commande COPY pour d'autres utilisateurs, par exemple. sur un README Github, le lecteur aura des problèmes ...La seule façon d'exprimer le chemin relatif avec les autorisations du client consiste à utiliser STDIN ,
comme rappelé ici :
la source
J'utilise cette fonction depuis un moment sans problème. Il vous suffit de fournir le nombre de colonnes qu'il y a dans le fichier csv, et il prendra les noms d'en-tête de la première ligne et créera le tableau pour vous:
la source
set schema 'data';
pour tout ce qui vousVous pouvez utiliser d6tstack qui crée la table pour vous et est plus rapide que pd.to_sql () car il utilise des commandes d'importation DB natives. Il prend en charge Postgres ainsi que MYSQL et MS SQL.
Il est également utile pour importer plusieurs CSV, résoudre les changements de schéma de données et / ou prétraiter avec des pandas (par exemple pour les dates) avant d'écrire dans db, voir plus bas dans les exemples de notebook
la source