Merge branch 'dev'

This commit is contained in:
Mathieu Jaumotte 2023-03-15 13:25:29 +01:00
commit ddfe9b53b3

View File

@ -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. 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. Ces manipulations sont décrites ici.
@ -12,10 +12,12 @@ Le client a rempli le canevas. Une relecture du fichier est toujours nécessaire
## 1. Préparer les fichiers csv ## 1. Préparer les fichiers csv
Le fichier se compose de plusieurs feuilles, chacune doit être sauvée au format 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'. Pour préparer les fichiers on va:
- Il faut ajouter les doublequote lors de la sauvegarde du csv, - nettoyer le fichier pour ne laisser en étiquette que les noms de colonnes en anglais.
- Il faut enlever tous les line breaks et caractères spéciaux. - 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 ```bash
# Exemple de remplacements exécutés sur les fichiers csv pour un import spécifique : # 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 ### 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 #### Importer le csv dans la db
- ouvre le fichier csv > passe en onglet text > edit as table > set options:
- ouvre le fichier csv > passe en onglet text > edit as table > first row is header > open table - cocher 'first row is header'
- import to database > régler target/schema et table - '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 #### Exporter en sql
- créer un fichier `<client>-data.sql` vide
- depuis la table insérée: export data > extractor: SQL-insert-multirow - 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 `<client>-data.sql`
## 3. Import du schéma 'import' sur le serveur (safran) ## 3. Import du schéma 'import' sur le serveur (safran)
- transférer le fichier SQL sur le serveur (avec scp) - transférer le fichier `<client>-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 - faire une sauvegarde de la base sur laquelle on va réaliser l'insertion
- importer le fichier sql sur la base cible ```bash
- vérifier que le schéma import est en place 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 ## 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. 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