Voir un article

Passer un fichier excel dans une base de donnée postgreSQL

Avec linux , c'est tres facile de passer un fichier excel dans une base de donnée postgres. (thématiques : csv to sql, excel to sql, csv to bdd, excel to bdd)
Voici comment faire sur postgres :

1/ exporter depuis excel votre fichier au format CSV (fichier / exporter et choisir format CSV) , avec comme séparateur le point virgule


sur linux maintenant :

1/ si besoin, reconvertir si besoin le fichier csv en utf8 (moi je préfère bosser en utf8, et ouinedoz est encore en iso-8859-1 :
# iconv -f iso-8859-1 -t utf-8 fichier.csv > /tmp/fichierUTF8.csv

libreoffice
: depuis libreoffice vous pouvez exporter en utf8 directement


2/ nous allons utiliser la première ligne du fichier , qui contient les noms des têtes de colonnes :
# head -n 1 /tmp/fichierUTF8.csv
Nom;Prénom;Code postal;Ville;Téléphone;Fax;Email


Pour produire un code SQL capable de créer une table "import" portant ces mêmes colonnes, grâce à sed nous allons tout simplement reformatter la ligne pour en faire un ordre sql , comme ceci  :
#  head -n 1 /tmp/fichierUTF8.csv |sed -e 's/[^a-zA-Z0-9;]//g'  -e 's/;/" text,"/g' -e 's/^/create table import ("/' -e 's/$/" text);/'

create table import ("Nom" text,"Prénom text","Codepostal" text,"Ville" text,"Téléphone" text,"Fax" text,"Email" text);

c'est beau hein ? (bon ok faut être connaisseur pour apprécier)

libreoffice : si vous avez exporter avec la simple quote autour de chaque champs et la virgule en séparateur  :
#  head -n 1 /tmp/fichierUTF8.csv |sed 's/,/;/g' |sed -e 's/[^a-zA-Z0-9;]//g'  -e 's/;/" text,"/g' -e 's/^/create table import ("/' -e 's/$/" text);/'


3/ Bien maintenant passont sur postgres pour créer la table, il suffit de se connecter à votre base, ou bien d'en créer une nouvelle d'abord comme ceci (sous root avec sudo -i) : 
# su - postgres
$ createdb -E utf8  mabase
$ psql mabase
mabase=#



4/ maintenant que vous êtes connecté en psql sur la base, il suffit de copier/coller l'ordre SQL produit en 2 :
mabase=#  create table import ("Nom" text,"Prénom text","Codepostal" text,"Ville" text,"Téléphone" text,"Fax" text,"Email" text);
CREATE TABLE



5/ et il suffit de copier le contenu du fichier csv dans la table import fraichement créée :
mabase=#  copy import from '/tmp/fichierUTF8.csv' CSV HEADER  DELIMITER ';' ;
COPY


libreoffice : si vous avez exporter avec la simple quote autour de chaque champs et la virgule en séparateur :
copy import from '/tmp/fichierUTF8.csv' CSV HEADER QUOTE as '''' DELIMITER ',' ;


6/ on vérifie le contenu importé  ( x pour passer en affichage étendu ) :
mabase=#  [antislashe]x
Affichage étendu activé.

mabase=#  select * from import;
-[ RECORD 1]---+-------------------------
Nom            | Billout
Prénom         | raoul
Codepostal     | 90000
Ville          | Epinal
Téléphone      | 03 xx xx xx xx
Fax            |
Email          | xxxxxx@wanadoo.fr
-[ RECORD 2]---+-------------------------
Nom            | Machin
...



A voir aussi : Un peu de littérature sur le sujet chez Amazon

8 273 clics - Créé le 01/04/2010 par Tito - Modifié le 02/10/2012



Réagissez, commentez, discutez ...

Soyez le premier à réagir !



Partager ?

diaspora  G+  facebook  twitter  Digg  Yahoo  Delicious  Technorati  myspace


Voir d'autres articles en rapport avec celui-ci ?



Stats des clics sur cet article : cliquez ici »



Vous voulez contribuer et publier un article dans cette rubrique ?

Merci de vous identifier ou de vous créer un compte si ce n'est pas déjà fait.