chill-import-from-canvas/README.md

2.9 KiB

CHILL - Reprise de données

Ce dépôt contient un script d'import qui s'applique à un canevas excel présenté au client. Le client remplit le fichier excel, puis le script insère les données dans la base de donnée.

L'opération est semi-automatique et réduit considérablement le temps dédié à l'import en structurant le format des données en entrée. Par contre il y a toujours une série de manipulations, pour insérer les données correctement.

Ces manipulations sont décrites ici.

Le client a rempli le canevas. Une relecture du fichier est toujours nécessaire afin de repérer les éventuelles irrégularités.

1. Préparer les fichiers csv

Le fichier se compose de plusieurs feuilles, chacune doit être sauvée au format csv.

  • Il faut nettoyer le fichier pour ne laisser en étiquette que les noms de colonnes en anglais.
  • Il faut ajouter une colonne de contôle en fin de ligne, par sécurité. Par exemple une colonne 'endcol' qui contient pour chaque cellule 'endrow'.
  • Il faut ajouter les doublequote lors de la sauvegarde du csv,
  • Il faut enlever tous les line breaks et caractères spéciaux.
# Exemple de remplacements exécutés sur les fichiers csv pour un import spécifique :
$ sed -e :1 -e '$q' -e "/$CR\$/b" -e 'N;s/\n//;b1' < file.2.csv > file.3.csv 
$ sed -e 's#"end"#"end"\n#g' < file.3.csv > file.4.csv

# Exemple pour un autre import:  
$ cat file2.csv | sed -e 'N; s#_x000D_##g; s#\n##g; s/$CR//g' | tr "\n" " " > file3.csv 
$ sed -e 's#"endcol"#"endcol"\n#g; s#"endrow"#"endrow"\n#g' < file3.csv > file4.csv
$ sed -e 's#^,##g; s#^ ##g' < file4.csv > file5.csv

2. Insérer les csv dans la base de donnée

On va insérer chaque feuille csv comme table à part entière d'un nouveau schéma import. On aura:

  • import.choix_personnes
  • import.personnes
  • import.choix_periodes
  • import.periodes

Pour réaliser cet import, on peut utiliser des outils tels que pgfutter, mais celui-ci peut s'avérer capricieux selon le fichier. La meilleure méthode pour moi est de réaliser cette étape en local avec phpstorm, puis d'exporter le schéma import avec pg_dump avant de le transférer sur le serveur.

2.a Manipulations dans phpstorm

Importer le csv dans la db

  • ouvre le fichier csv > passe en onglet text > edit as table > first row is header > open table
  • import to database > régler target/schema et table

Exporter en sql

  • depuis la table insérée: export data > extractor: SQL-insert-multirow

3. Import du schéma 'import' sur le serveur (safran)

  • transférer le fichier SQL sur le serveur (avec scp)
  • faire une sauvegarde de la base sur laquelle on va réaliser l'insertion
  • importer le fichier sql sur la base cible
  • vérifier que le schéma import est en place

4. Exécution du script de migration

Se fait dans la console postgresql, en tant que user postgres, en étant connecté à la base de donnée cible.