web-dev-qa-db-fra.com

Comment charger des données à partir d'un fichier texte dans une base de données PostgreSQL?

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.

20
ulima69

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('|') );
17
user1225054

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

14

Découvrez la commande COPY de Postgres:

http://www.postgresql.org/docs/current/static/sql-copy.html

5

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)  
  …
2
Ehvince