
# Migration vers tables partitionnées
Ce dossier contient tous les scripts nécessaires pour migrer les tables vers une structure partitionnée par date.

## Configuration (à faire en premier)

### `db.config.sh` — paramètres centralisés
Tout est configurable depuis ce fichier unique :
- Connexion DB : `DB`, `USER`, `HOST`, `PORT`, `PGPASSWORD`
- Parallélisme : `WORKERS` (nombre de sessions psql simultanées)
- Fenêtre de partitionnement :
  - `PARTITION_DATE_FROM` — début de la fenêtre (inclusif), ex: `2020-01-01`
  - `PARTITION_DATE_TO`   — fin de la fenêtre (exclusif), ex: `2027-01-01`
  - `PARTITION_MONTHS`    — durée de chaque partition en mois, ex: `3`

---

## Étapes recommandées

### Étape 1 — Initialiser la base
Lance `prepare_database.sh` (lit automatiquement `db.config.sh`) :

    chmod +x prepare_database.sh
    ./prepare_database.sh

### Étape 2 — Mettre à jour les partition_id
Configure `steps.conf.sh` à la racine (activer/désactiver les steps, taille des batches),
puis lance :

    cd change_partition_id
    chmod +x run_all_steps.sh
    ./run_all_steps.sh

Logs par step dans `change_partition_id/logs/` (un fichier global + un fichier par worker).

⚠️ Important : effectuer cette étape AVANT la migration physique des données,
pour éviter de déplacer des lignes d'une partition à une autre ensuite.

### Étape 3 — Migrer les tables vers les partitions
Les mêmes toggles `ENABLE_STEP*` de `steps.conf.sh` contrôlent aussi quels pipelines tournent.
Lance tous les pipelines d'un coup depuis la racine :

    chmod +x run_all_pipelines.sh
    ./run_all_pipelines.sh

Ou manuellement table par table :

    cd create_partitions_on_tables/edr && ./run_pipeline_edr.sh
    cd ../wo                           && ./run_pipeline_wo.sh
    cd ../rt                           && ./run_pipeline_rt.sh
    cd ../maco_d_cdr                   && ./run_pipeline_cdr.sh
    cd ../maco_d_billable_subscription && ./run_pipeline_bs.sh
    cd ../maco_d_billable_fee          && ./run_pipeline_bf.sh
    cd ../maco_d_billable_consumption  && ./run_pipeline_bc.sh

⚠️ Important : pendant cette étape, aucun système externe ne doit modifier les données
de la table en cours de migration (toute modification sera perdue).

---

## Structure des fichiers

    db.config.sh                          ← Configuration centrale (DB, WORKERS, dates partitions)
    steps.conf.sh                         ← Activer/désactiver les steps/pipelines, taille des ranges
    prepare_database.sh                   ← Point d'entrée étape 1 (source db.config.sh + appelle le .sql)
    prepare_database.sql                  ← Crée les fonctions et le mapping de partitions
    run_all_pipelines.sh                  ← Lance tous les pipelines create_partitions séquentiellement
    README.txt                            ← Ce fichier

    change_partition_id/
      run_all_steps.sh                    ← Orchestre tous les steps en parallèle
      sql/step_worker.sql                 ← Worker SQL générique (claim + execute un range)
      logs/                               ← Logs globaux + logs par step/worker

    create_partitions_on_tables/<table>/
      create_<x>_partitions.sql           ← Renomme l'ancienne table, crée la nouvelle partitionnée
      copy_<x>_data_multi_sessions.sql    ← Copie les données par batch (utilisé par les workers)
      finalise_<x>_table.sql             ← Applique les index/contraintes sur la nouvelle table
      run_pipeline_<x>.sh                ← Orchestre les 3 étapes ci-dessus
      logs/                              ← Logs par worker

