79 lines
2.3 KiB
Markdown
79 lines
2.3 KiB
Markdown
# Migration Scripts
|
|
|
|
Utility scripts per la gestione della migrazione.
|
|
|
|
## sync_migration_state.py
|
|
|
|
Sincronizza la tabella `migration_state` con i dati effettivamente presenti in PostgreSQL.
|
|
|
|
### Quando usare
|
|
|
|
Usa questo script quando `migration_state` non è sincronizzato con i dati reali, ad esempio:
|
|
- Dopo inserimenti manuali in PostgreSQL
|
|
- Dopo corruzione dello stato
|
|
- Prima di eseguire migrazione incrementale su dati già esistenti
|
|
|
|
### Come funziona
|
|
|
|
Per ogni tabella (rawdatacor, elabdatadisp):
|
|
1. Trova la riga con MAX(created_at) - l'ultima riga inserita
|
|
2. Estrae la consolidation key da quella riga
|
|
3. Aggiorna `migration_state._global` con quella chiave
|
|
|
|
### Utilizzo
|
|
|
|
```bash
|
|
# Eseguire dalla root del progetto
|
|
python scripts/sync_migration_state.py
|
|
```
|
|
|
|
### Output
|
|
|
|
```
|
|
Syncing migration_state with actual PostgreSQL data...
|
|
================================================================================
|
|
|
|
ELABDATADISP:
|
|
Most recently inserted row (by created_at):
|
|
created_at: 2025-12-30 11:58:24
|
|
event_timestamp: 2025-12-30 14:58:24
|
|
Consolidation key: (ID0290, DT0007, 2025-12-30, 14:58:24)
|
|
✓ Updated migration_state with this key
|
|
|
|
RAWDATACOR:
|
|
Most recently inserted row (by created_at):
|
|
created_at: 2025-12-30 11:13:29
|
|
event_timestamp: 2025-12-30 11:11:39
|
|
Consolidation key: (ID0304, DT0024, 2025-12-30, 11:11:39)
|
|
✓ Updated migration_state with this key
|
|
|
|
================================================================================
|
|
✓ Done! Incremental migration will now start from the correct position.
|
|
```
|
|
|
|
### Effetti
|
|
|
|
Dopo aver eseguito questo script:
|
|
- `migration_state._global` sarà aggiornato con l'ultima chiave migrata
|
|
- `python main.py migrate incremental` partirà dalla posizione corretta
|
|
- Non verranno create duplicazioni (usa ON CONFLICT DO NOTHING)
|
|
|
|
### Avvertenze
|
|
|
|
- Esclude automaticamente dati corrotti (unit_name come `[Ljava.lang.String;@...`)
|
|
- Usa `created_at` per trovare l'ultima riga inserita (non `event_timestamp`)
|
|
- Sovrascrive lo stato globale esistente
|
|
|
|
### Verifica
|
|
|
|
Dopo aver eseguito lo script, verifica lo stato:
|
|
|
|
```sql
|
|
SELECT table_name, partition_name, last_key
|
|
FROM migration_state
|
|
WHERE partition_name = '_global'
|
|
ORDER BY table_name;
|
|
```
|
|
|
|
Dovrebbe mostrare le chiavi più recenti per entrambe le tabelle.
|