Kalli
Database

Database Installation & Setup

Installation & configuration de la base

Démarrer PostgreSQL

Option 1 : Docker

docker run -d --name naivi-postgres \
  -p 5432:5432 \
  -e POSTGRES_USER=naivi \
  -e POSTGRES_PASSWORD=naivi \
  -e POSTGRES_DB=naivi \
  postgres:17-alpine

DATABASE_URL=postgresql://naivi:naivi@localhost:5432/naivi

Les tests de la CI utilisent postgres:17-alpine. Les identifiants ci-dessus ne servent qu'en local.

Option 2 : PostgreSQL local

Installer PostgreSQL 13 ou plus récent, puis :

CREATE USER naivi WITH PASSWORD 'naivi';
CREATE DATABASE naivi OWNER naivi;

Appliquer le schéma

Le schéma est géré par Drizzle depuis apps/server/ :

cd apps/server
bun run db:migrate     # applique les migrations de apps/server/drizzle/

bun run db:push pousse le schéma directement, sans migration : à réserver au développement. Pour créer une migration après une modification du schéma, utiliser bun run db:generate.

0000_transform_to_unified_schema.sql active l'extension pgcrypto (gen_random_uuid()). Sur PostgreSQL 13 et plus, elle n'est pas indispensable, mais la migration l'active quand même.

Variables

VariableServiceRôle
DATABASE_URLserveur, document-processor, rag-agentBase principale, format postgresql://<user>:<password>@<host>:<port>/<database>
CHAINLIT_DATABASE_URLserveurBase Chainlit (logo, feedbacks). Requise pour ces deux fonctions.

rag-agent se connecte avec psycopg2 (apps/rag-agent/src/common/db.py). Le serveur passe par Drizzle et le pool pg (apps/server/src/db/index.ts).

Rôles par défaut

Au premier démarrage du serveur, ensureDefaultRoles() crée deux rôles applicatifs, s'ils n'existent pas :

  • admin : is_super_admin = true, display_order = 0 ;
  • user : is_super_admin = false, display_order = 1.

Ce ne sont pas les rôles Better Auth (user.role) : voir Rôles & tags.

Sauvegarde et restauration

pg_dump -U naivi naivi > backup.sql
psql -U naivi naivi < backup.sql

En Kubernetes, utiliser un opérateur PostgreSQL ou des CronJobs de sauvegarde. Tester les restaurations régulièrement.