Server
Database & Migrations
Base de données & migrations (serveur)
Cette page décrit comment le serveur accède à la base et gère ses migrations. Le détail des tables est dans Schéma & rôles des tables.
Fichiers
| Élément | Emplacement |
|---|---|
| Connexions | apps/server/src/db/index.ts |
| Schémas Drizzle | apps/server/src/db/schema/auth.ts (Better Auth), apps/server/src/db/schema/naivi.ts (métier) |
| Configuration Drizzle | apps/server/drizzle.config.ts |
| Migrations SQL | apps/server/drizzle/ (0000 à 0005, journal dans drizzle/meta/_journal.json) |
| Script de migration | apps/server/src/scripts/migrate.ts (lit DATABASE_URL) |
Connexions
Deux pools pg sont créés au démarrage :
- Principal (
DATABASE_URL, 20 connexions max) : schémasauthetnaivi, utilisé par toutes les procédures. - Chainlit (
CHAINLIT_DATABASE_URL, 10 connexions max) : lecture seule côté métier, pourgetLogoetgetAllFeedback.
Les deux pools sont fermés sur SIGTERM et SIGINT.
Scripts
Lancés depuis apps/server/ :
| Script | Effet |
|---|---|
bun run db:generate | Génère une migration SQL à partir des schémas TypeScript |
bun run db:migrate | Applique les migrations existantes |
bun run db:push | Pousse directement le schéma (développement uniquement) |
bun run db:status | Vérifie l'état des migrations (check-migrations.ts) |
bun run db:studio | Interface Drizzle Studio |
Le déploiement applique les migrations avant de démarrer le serveur : dans Helm, un initContainer db-migrate lance db:migrate (voir Déploiement).
Historique des migrations
| Fichier | Contenu |
|---|---|
0000_transform_to_unified_schema.sql | Crée les extensions et enums, les tables Better Auth (si absentes), les tables métier unifiées (files, chunks, qa_pair, logo, tags, roles, role_tags, item_tags, indexes, index_chunks). Migre les anciennes tables (regular_files, qa_files, chunk_tags, qa_tags, indexes_chunks) puis les supprime. Active pgcrypto pour gen_random_uuid(). |
0001_pink_luke_cage.sql | Supprime la clé étrangère de index_chunks.chunk_id, qui référence à la fois chunks et qa_pair. |
0002_add_role_id_to_indexes.sql | Ajoute indexes.role_id (FK vers roles, ON DELETE SET NULL) et l'index indexes_role_active_idx. |
0003_create_chainlit_tables.sql | Crée les tables Chainlit (User, Thread, Step, Element, Feedback) dans la base migrée. |
0004_open_dark_beast.sql | Ajoute chunks.metadata et files.processing_metadata (JSONB). |
0005_premium_tombstone.sql | Ajoute roles.is_hierarchy_excluded. |
Points à connaître :
- La table
file_assignmentsest créée par0000et n'est plus utilisée : elle n'existe pas dansdb/schema/naivi.ts(déclaration commentée). Elle peut donc subsister dans une base existante. - La table
logoest créée dans la base migrée, maisgetLogolit le logo dans la base Chainlit (CHAINLIT_DATABASE_URL). - La migration
0003place les tables Chainlit dans la même base que le schéma métier, alors que le serveur les lit par un pool distinct. Si les deux bases sont séparées,0003crée des tables inutilisées dans la base principale.
Règles de modification
- Modifier le schéma dans
apps/server/src/db/schema/*.ts. - Lancer
bun run db:generate, puis relire le SQL généré dansapps/server/drizzle/. - Committer la migration avec le code qui en dépend.
- Appliquer les migrations avant de déployer ce code (
db:migrate).
Les modifications manuelles de schéma en production sont à éviter : elles désynchronisent le journal Drizzle.