J'ai un fichier comme (fichier CSV):
value1|value2|value2....
value1|value2|value2....
value1|value2|value2....
value1|value2|value2....
et souhaite charger ces données dans une table postgresql.
La version légèrement modifiée de COPY
ci-dessous a mieux fonctionné pour moi, où je spécifie le format CSV
. Ce format traite les caractères antislash dans le texte sans problème. Le format par défaut est quelque peu décalé TEXT
.
COPY myTable FROM '/path/to/file/on/server' ( FORMAT CSV, DELIMITER('|') );
Considérons que vos données sont dans le fichier values.txt
et que vous souhaitez les importer dans la table de base de données myTable
alors la requête suivante fait le travail
COPY myTable FROM 'value.txt' (DELIMITER('|'));
https://www.postgresql.org/docs/current/static/sql-copy.html
Découvrez la commande COPY de Postgres:
Il y a Pgloader qui utilise la commande COPY
susmentionnée et qui peut charger des données depuis csv (et MySQL, SQLite et dBase). Il utilise également des threads séparés pour lire et copier des données, donc c'est assez rapide (assez intéressant, il a été écrit de Python vers Common LISP et a obtenu un gain de vitesse de 20 à 30x, voir article de blog ).
Pour charger le fichier csv, il faut écrire un petit fichier de configuration, comme
LOAD CSV
FROM 'path/to/file.csv' (x, y, a, b, c, d)
INTO postgresql:///pgloader?csv (a, b, d, c)
…