PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 30/11/2015 13:41:00

Importer un fichier CSV dans un table Postgresql

Bonjour,

Pour ceux qui cherchent une solution facile pour importer des CSV dans pg.
(Ou un fichier Excel transformé en CSV.)

Voici comment je fais :

DROP TABLE IF EXISTS table_x1 ;  

CREATE TABLE  table_x1 (bigfield TEXT)                     -- avec TEMP si on veut
;
 
copy table_x1 FROM '/home/jasonc/csv_data/data.csv' 
		WITH 
 		delimiter '!' -- ce caractère ne se trouve pas dans le fichier
;
				
DROP TABLE IF EXISTS  table  x_2;  
SELECT 
split_part(bigfield, ';',  1) 		AS id,
split_part(bigfield, ';',  2) 		AS type,
split_part(bigfield, ';',  3)::date  	AS create_date,
split_part(bigfield, ';',  4)::numeric	AS salary
...
into x_2
from x_1
; 
DROP table x_1 -- si on veut.

-- Avantages :
-- c'est plus facile de balancer tous le fichier tout entier dans pg
-- plutôt que de gérer le feedback confusionnant retourné par la commande COPY
-- on peut facilement sélectionner les colonnes a envoyer dans x_2, et ignorer d'autres
----
Autre variante :

DROP TABLE IF EXISTS table_x1 ;  

CREATE TABLE  table_x1 (bigfield TEXT)
;
 
copy table_x1 FROM '/home/jasonc/csv_data/data.csv'
		WITH 
 		delimiter '!' -- ce caractère ne se trouve pas dans le fichier
;
				
ALTER TABLE x_1
ADD COLUMN id text ,
ADD COLUMN  type text 
;

Update x_1
set 
id    = split_part(bigfield, ';',  1) 		,
type= split_part(bigfield, ';',  2) 	
;

Une fois qu'on est certain d'avoir récupéré les colonnes utiles, on pour faire un drop sur la colonne bigfield.

Voilà.
Moi je fais comme ça.

Jason

Hors ligne

Pied de page des forums