From cea5190174e8275f1a6d838361144663121fd32a Mon Sep 17 00:00:00 2001 From: Mathieu Jaumotte Date: Wed, 15 Mar 2023 11:55:06 +0100 Subject: [PATCH] update readme --- README.md | 77 +++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 61 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 7a6ad34..622ff7f 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ 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. +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 préparer et insérer les données correctement. Ces manipulations sont décrites ici. @@ -11,11 +11,13 @@ Le client a rempli le canevas. Une relecture du fichier est toujours nécessaire ## 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. +Le fichier se compose de plusieurs feuilles, chacune doit être sauvée au format csv. + +Pour préparer les fichiers on va: +- nettoyer le fichier pour ne laisser en étiquette que les noms de colonnes en anglais. +- ajouter une colonne de contôle en fin de ligne, par sécurité. Par exemple une colonne 'endcol' qui contient pour chaque cellule 'endrow'. +- ajouter les doublequote lors de la sauvegarde du csv, +- enlever tous les line breaks et caractères spéciaux. ```bash # Exemple de remplacements exécutés sur les fichiers csv pour un import spécifique : @@ -41,27 +43,70 @@ La meilleure méthode pour moi est de réaliser cette étape en local avec phpst ### 2.a Manipulations dans phpstorm +- S'il n'existe pas, créer le schéma `import`; s'il existe, s'assurer qu'il ne contient pas de tables ni de données. #### 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 - +- ouvre le fichier csv > passe en onglet text > edit as table > set options: + - cocher 'first row is header' + - 'null value text': undefined (pas de champs null dans la table, mais un texte vide) + - then > open table +- import to database > set options: + - régler target/schema: import + - et table: même nom que le csv + - DDL: TEXT pour tous les champs + - then > import #### Exporter en sql - -- depuis la table insérée: export data > extractor: SQL-insert-multirow - +- créer un fichier `-data.sql` vide +- depuis chaque table du schéma `import`: + - copier le DDL de la table dans le fichier (s'assurer d'ajouter le préfixe `import.` sur chaque requête) + - export data > extractor: SQL-insert-multirow > copy to clipboard +- coller les données dans `-data.sql` ## 3. Import du schéma 'import' sur le serveur (safran) -- transférer le fichier SQL sur le serveur (avec scp) +- transférer le fichier `-data.sql` sur le serveur (avec scp): +```bash +$ scp cyclo-data.sql debian@safran:~/data/tmp/ +``` + - 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 +```bash +debian@safran:~/bin$ bash backup_now_db.sh 5436 cycloprod +debian@safran:~/bin$ ls -l dump/ | tail -1 +-rw-r--r-- 1 postgres postgres 234954230 Mar 15 10:40 20230315-104003_cycloprod.sql +``` + +- importer le fichier sql sur la base cible: `$ sudo su postgres -c 'psql -p5436'` +```sql +postgres=# \c cycloprod +You are now connected to database "cycloprod" as user "postgres". + +cycloprod=# \dt import.* +Did not find any relation named "import.*". + +cycloprod=# CREATE SCHEMA import; + +-- insertion +cycloprod=# \i '/home/debian/data/tmp/cyclo-data.sql' + +-- vérifier que le schéma import est en place +cycloprod=# \dt import.* + List of relations + Schema | Name | Type | Owner +--------+-----------------+-------+---------- + import | choix_periodes | table | postgres + import | choix_personnes | table | postgres + import | periodes | table | postgres + import | personnes | table | postgres +(4 rows) +``` ## 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. +On joue pas-à-pas les blocs de la section 'Up' du script `sql/import.sql` +## Tips +- Dans phpstorm, si on veut renommer le schéma pour ne pas tout mélanger, il vaut mieux faire 'Modify schema', car 'Rename' va faire des remplacements partout