Branching de bases (copy-on-write)

Clone instantané d'un backend en moins de 10 s — équivalent git branch pour PostgreSQL. Idéal pour tester migrations dangereuses, preview environments par PR.

Branching de base — git branch pour PostgreSQL

Le branching Pool C est l'équivalent d'un git branch pour les bases de données : en moins de 10 secondes, un clone instantané du dataset produit un backend complet et indépendant avec les mêmes données que le parent au moment du clone. Mécanisme rendu possible par le copy-on-write du filesystem versionné : le clone ne stocke initialement que les différences, et les deux instances peuvent diverger librement.

Quand brancher — quand non

Idéal pour

  • Tester une migration dangereuse avant production
  • Preview environments par PR (données réelles de staging)
  • Sandbox de développement avec données anonymisées
  • Reproduction de bug client sur copie isolée

Pas adapté

  • Forks permanents avec divergence importante (préférer un nouveau backend)
  • Plan Free (branching disponible Pro+)

Créer une branche

# Depuis le projet principal
paas backends branch create feature-auth-v2 --project wzfbhd

# Depuis une autre branche (ex: staging)
paas backends branch create test-migration --project wzfbhd --from staging

# Via API
curl -X POST "https://console.di2amp.com/api/v1/backends/wzfbhd/branches" \
  -H "Authorization: Bearer $PAAS_TOKEN" -H "Content-Type: application/json" \
  -d '{"name":"feature-auth-v2"}'

# Réponse
{
  "project_id": "abcdef",
  "name": "feature-auth-v2",
  "parent_project_id": "wzfbhd",
  "url": "https://abcdef.runtime.di2amp.com",
  "status": "active"
}

Comment ça marche

Workflow en 5 à 10 secondes :

  1. Snapshot du dataset parent (instantané, copy-on-write)
  2. Clone du snapshot — pas de copie physique, juste un pointeur
  3. Génération d'un nouveau project_id de 6 lettres
  4. Démarrage d'un container PostgreSQL sur le clone, avec credentials distincts
  5. Routing : abcdef.runtime.di2amp.com → compute hébergeant la branche

L'espace supplémentaire n'est alloué que pour les blocs modifiés après la création.

Indépendance complète

Une fois créée, la branche est totalement indépendante du parent :

-- Sur la branche
ALTER TABLE users ADD COLUMN phone_verified BOOLEAN DEFAULT false;
UPDATE users SET status = 'test';

Le parent n'est pas affecté. Les blocs modifiés sont stockés uniquement dans le dataset de la branche. Réciproquement, les nouvelles données du parent sont invisibles depuis la branche après le clone.

Lister et gérer

paas backends branches list --project wzfbhd
paas backends branches show abcdef --project wzfbhd
paas backends branches delete abcdef --project wzfbhd

Cycle de vie

TypeDurée de vie
Branche éphémère (défaut)30 jours puis suppression auto
Branche liée à une PRSupprimée au merge / close de la PR
Branche persistante (--persistent)Pas de suppression auto (Pro+)

Cleanup horaire automatique. Destruction d'une branche libère les blocs copy-on-write.

« Merge » vers le parent

Le merge automatique de données n'est pas supporté (trop de cas conflictuels). Procédure recommandée : générer les migrations SQL depuis la branche, valider sur la branche, appliquer manuellement sur le parent via le SQL Editor du Studio.

Intégration preview environments Pool A

Les branches Pool C s'intègrent avec les preview environments Pool A. Workflow paas.toml :

[preview]
enabled = true
backend_branch = true        # créer une branche Pool C par PR
backend_project = "wzfbhd"   # parent à brancher

À l'ouverture d'une PR : preview Pool A créé (monapp-pr-42.runtime.di2amp.com) + branche Pool C créée (pr42abc.runtime.di2amp.com) + variables d'environnement du preview pointant vers la branche. À la fermeture / merge : les deux sont détruits simultanément.

Plans

PlanBranches
FreeNon disponible
Pro5 branches actives max
Businessillimité
Entrepriseillimité + branches persistantes

Sécurité et isolation

Une branche est un projet à part entière, avec ses propres credentials, son propre jwt_secret. Aucun croisement de données possible entre une branche et son parent au niveau auth.

Pour aller plus loin

Tarification associée

Branching facturé à l'heure de branche active (espace copy-on-write + ressources compute). Indicatif ~0,013 €/h en Pro. Voir tarifs.