-
Notifications
You must be signed in to change notification settings - Fork 0
1.8 Step | CreateDatabase
Crea il database applicativo (
db_name) con ownerdb_user, in modo reversibile. Vive insrc/steps/create_database.rs. Port dicreate_db_if_missingdilib/postgres.sh.Qui vive la protezione più importante dell'intero installer.
È la singola riga di comportamento che distingue "installer che pulisce" da "installer che può distruggere i dati di un cliente".
Un database con lo stesso nome che esisteva già può contenere dati reali. L'undo lo droppa solo se lo abbiamo creato noi (
PreState::CreatedByUs). SuPreexistingl'undo è rigorosamente NO-OP.
Il ramo è progettato per essere impossibile da sbagliare: il PreState governa il drop, e la
chiamata a dropdb è raggiungibile solo nel ramo CreatedByUs. Non esiste percorso di codice che porti
a droppare un DB Preexisting.
undo:
if prestate != CreatedByUs → log "DB preesistente, NON rimosso" e RITORNA
altrimenti → dropdb --if-exists --force
| Fase | Comportamento |
|---|---|
| snapshot | il DB esiste già? (SELECT 1 FROM pg_database WHERE datname = ...) → Preexisting/Untracked. È la fonte di verità della protezione |
| run |
Preexisting → skip. Assente → createdb --owner <user> <db>, poi CreatedByUs. dry_run → solo log |
| undo |
solo CreatedByUs → dropdb --if-exists --force (chiude le connessioni attive). Preexisting → NO-OP con log esplicito |
Questa non è una gentilezza: è la barriera anti-distruzione. I test la blindano da più angoli:
- DB
Preexisting→ l'undo non produce alcunDROP DATABASE(né alcuncreatedb); - DB assente (
CreatedByUs) →createdbin run,dropdbin undo; - DB
Preexisting→ nessundropdbnemmeno invocandoundopiù volte.
Se un domani un refactor rompesse la protezione, questi test fallirebbero subito.
-
--forcesudropdbtermina le connessioni attive prima di rimuovere (solo per DB nostri). - Undo best-effort.
- Coordinamento con 1.7 CreateDbRole: questo step gira dopo il ruolo, quindi al rollback il suo undo (drop DB) precede il drop del ruolo che possiede il DB.
Start here
Key concepts
References
For developers
Technical detail — how it works inside
Steps:
- 1.1 PrepareOptRoot
- 1.2 CreateOdooUser
- 1.3 SetupLogDir
- 1.3b SetupCacheDir
- 1.4 AptPackages (delta)
- 1.5 InstallWkhtmltopdf
- 1.6 SetupPostgres
- 1.7 CreateDbRole
- 1.8 CreateDatabase
- 1.9 CloneOdooRepo
- 1.10 CreateVirtualenv
- 1.11 InstallPythonRequirements
- 1.12 GenerateConfig
- 1.12b SetupDataDir
- 1.13 InitializeOdooDatabase
- 1.14 SetupSystemd
- 1.15 Nginx (6 sub-steps)
- 1.16 WriteControlScript + PatchBashrc
Cross-cutting: