MIGRATION

Migrer vers Lampion

§ 01 — VUE D'ENSEMBLE

Exporter, créer, restaurer, vérifier, basculer

Une migration vers Lampion suit toujours le même schéma. La majorité des migrations prennent moins de 10 minutes pour une base sous 5 GB.

EXPORT
pg_dump depuis le provider source.
CREATE
Créer un projet Lampion (console ou API).
RESTORE
pg_restore vers Lampion.
SWITCH
Basculer la connection string.
bashsetup
# PostgreSQL client tools — version ≥ 17 requise
$ psql --version
psql (PostgreSQL) 17.2
# Debian / Ubuntu
$ apt install postgresql-client-17
# macOS
$ brew install postgresql@17

Ces outils (pg_dump, pg_restore, psql) doivent être en version ≥ 17 pour être compatibles avec le PostgreSQL 17 de Lampion.

§ 02 — EXPORT

Dump depuis la source

Récupérez un dump complet depuis votre provider actuel. Le format custom (-Fc) est compressé, supporte la restauration parallèle, et permet de filtrer à la restauration.

--format=custom
Compressé, restauration parallèle, filtrable au restore.
--no-owner
Ignore les rôles propriétaires de la source.
--no-privileges
Ignore les GRANT — évite les erreurs role "xxx" does not exist au restore, car Lampion utilise son propre rôle cloud_admin.
bashpg_dump — format custom
$ pg_dump "postgresql://user:[email protected]:5432/mydb" \
  --format=custom \
  --no-owner \
  --no-privileges \
  --file=mydb.dump
-- Dump terminé : mydb.dump (124 MB)
§ 03 — CRÉER LE PROJET

Un projet Lampion, une connection string

Créez un projet via la console ou l'API. Vous récupérez immédiatement une connection string prête à l'emploi.

01
Créer un compte
02
Cliquer sur New Project
03
Choisir un nom et une région
04
Copier la connection string
API RESTConsole web
$ curl -X POST \
  -H "Authorization: Bearer $TOKEN" \
  -d '{"name":"my-app","region":"fr-par-1"}' \
  api.lampion.cloud/v1/projects
{"connection_string":"...",
 "pg_password":"..."}
§ 04 — RESTAURER

pg_restore vers Lampion

Utilisez la connection string Lampion comme cible. Le flag --jobs parallélise la restauration et accélère le processus pour les grosses bases.

--jobs=4
Parallélise la restauration ; accélère nettement les grosses bases.
Bases > 10 GB
Passez temporairement le compute à 4-8 CU via la console avant le restore, puis revenez à 0.25 CU. Gain en temps de restore et en coût.
bashpg_restore — vers Lampion
$ pg_restore \
  --dbname="postgresql://cloud_admin:[email protected]:5432/ep-abc.postgres?sslmode=require" \
  --no-owner --no-privileges --jobs=4 --verbose \
  mydb.dump
pg_restore: creating TABLE "public.users"
pg_restore: processing data for table "public.users"
pg_restore: creating INDEX "users_email_key"
-- Restauration terminée en 47 secondes
§ 05 — VÉRIFIER

Compter tables, index, lignes

Comparez le nombre de tables, d'index et le compte de lignes pour chaque table critique entre la source et Lampion.

\dt · \di
Comparez le nombre de tables et d'index.
n_live_tup
Comparez le compte de lignes table par table.
ANALYZE
pg_restore ne lance pas ANALYZE automatiquement : lancez VACUUM ANALYZE pour que le planner ait des statistiques fraîches sur vos tables migrées.
bashpsql — checks de cohérence
# Nombre de tables
$ psql "$LAMPION_URL" -c "\dt"
# Compte de lignes par table
$ psql "$LAMPION_URL" -c "
  SELECT schemaname, relname, n_live_tup
  FROM pg_stat_user_tables ORDER BY n_live_tup DESC;"
# Index présents
$ psql "$LAMPION_URL" -c "\di"
# Comparer avec la source
$ psql "$SOURCE_URL" -c "SELECT ... FROM pg_stat_user_tables;"
§ 06 — BASCULER

Bascule du trafic, downtime minimal

Mettez à jour la DATABASE_URL de vos applications. La connection string change, rien d'autre. Pour minimiser le downtime, passez la source en lecture seule pendant le switch.

Procédure recommandéeDATABASE_URL
01Migration complète une première fois (sans coupure).
02Tests applicatifs sur Lampion en parallèle.
03Maintenance window : passer la source en read-only.
04Dump incrémental des dernières écritures.
05Restore sur Lampion.
06Mettre à jour DATABASE_URL et redéployer.
07Garder la source en standby 24-48h pour un rollback immédiat si besoin.
§ 07 — GUIDES PAR PROVIDER

Neon, Supabase, RDS, Heroku, Cloud SQL, self-hosted

Spécificités par fournisseur source. La logique reste la même partout : exporter, restaurer, switcher.

Neon— Architecture similaire, migration directe

Neon utilise la même architecture (pageserver/safekeeper). La migration est directe.

# 1. Récupérer la connection string Neon (Dashboard → Connection Details)
$ pg_dump "postgresql://user:[email protected]/neondb?sslmode=require" \
    -Fc --no-owner --no-privileges -f neon.dump
# 2. Restore sur Lampion
$ pg_restore -d "$LAMPION_URL" --no-owner --no-privileges -j 4 neon.dump
Supabase— Attention aux schémas système

Supabase ajoute des schémas système (auth, storage, realtime). Filtrez sur public uniquement, sauf si vous voulez tout migrer.

# Récupérer le mot de passe DB (Settings → Database)
$ pg_dump "postgresql://postgres:[PASSWORD]@db.[REF].supabase.co:5432/postgres" \
    --schema=public -Fc --no-owner --no-privileges -f supabase.dump
$ pg_restore -d "$LAMPION_URL" --no-owner --no-privileges -j 4 supabase.dump
AWS RDS / Aurora PostgreSQL— Security group et coûts de transfert

Assurez-vous que votre IP est dans le security group RDS. Pour les grosses instances, lancez le dump depuis une EC2 dans le même VPC pour éviter les coûts de transfert sortant.

# Depuis votre machine (ou une EC2 dans le même VPC)
$ pg_dump "postgresql://admin:[email protected]:5432/myapp?sslmode=require" \
    -Fc --no-owner --no-privileges -f rds.dump
$ pg_restore -d "$LAMPION_URL" --no-owner --no-privileges -j 4 rds.dump
Heroku Postgres— Via la CLI Heroku

La CLI Heroku fournit pg:backups pour générer un dump compressé téléchargeable.

# 1. Capturer un backup
$ heroku pg:backups:capture -a my-app
# 2. Télécharger le dump
$ heroku pg:backups:download -a my-app
-- latest.dump (89 MB)
# 3. Restore sur Lampion
$ pg_restore -d "$LAMPION_URL" --no-owner --no-privileges -j 4 latest.dump
GCP Cloud SQL— IP publique ou Auth Proxy

Activez l'IP publique temporairement, ou utilisez le Cloud SQL Auth Proxy pour vous connecter en local.

# Avec Cloud SQL Auth Proxy
$ cloud-sql-proxy --port 5433 my-project:europe-west1:my-instance &
$ pg_dump "postgresql://postgres:[email protected]:5433/myapp" \
    -Fc --no-owner --no-privileges -f cloudsql.dump
$ pg_restore -d "$LAMPION_URL" --no-owner --no-privileges -j 4 cloudsql.dump
Self-hosted PostgreSQL— Bare metal, VM, Docker, Kubernetes

Si vous hébergez votre propre PostgreSQL, lancez pg_dump directement sur l'hôte ou via SSH. Avantage : pas de limite de bande passante imposée par un provider.

# Sur le serveur source
$ sudo -u postgres pg_dump myapp -Fc --no-owner --no-privileges -f /tmp/myapp.dump
# Transférer en local
$ scp [email protected]:/tmp/myapp.dump .
# Restore sur Lampion
$ pg_restore -d "$LAMPION_URL" --no-owner --no-privileges -j 4 myapp.dump
§ 08 — PIÈGES COURANTS

Six erreurs fréquentes, six correctifs

Les problèmes les plus fréquents et comment les résoudre.

EXTENSIONSExtension manquante au restore

Si votre source utilise pgvector, postgis ou autres, installez-les sur Lampion avant le restore via la console (Settings → Extensions) ou l'API.

ROLESRole "xxx" does not exist

Toujours utiliser --no-owner --no-privileges au dump ET au restore. Si vous avez besoin de rôles applicatifs spécifiques, créez-les après le restore via la section Roles de la console ou l'API.

SEQUENCESSéquences désynchronisées

Si vous avez dumpé puis écrit sur la source avant la coupure, les séquences peuvent être en retard. Resynchronisez-les après le switch :

SELECT setval(pg_get_serial_sequence('users', 'id'),
       (SELECT MAX(id) FROM users));
PERFORMANCEBases > 50 GB

Pour les très grosses bases : (1) resize le compute Lampion à 8 CU avant le restore, (2) utilisez --jobs=8, (3) dumpez par schéma ou par table si possible pour pouvoir reprendre en cas d'échec, (4) ouvrez un ticket support avant la migration pour bénéficier d'un accompagnement.

TLSSSL connection required

Lampion impose TLS 1.3 sur toutes les connexions. Ajoutez toujours ?sslmode=require à la fin de la connection string si votre client ne le fait pas automatiquement.

ENCODINGEncodage et collation

Lampion utilise UTF8 et la collation en_US.utf8 par défaut. Si votre source utilise une collation différente, créez la base manuellement avec la bonne collation avant le restore.

Migrez votre base,
sans lock-in.

Créer un compte Premier pg_restore en quelques minutes.