Chaque fois que je démarre un nouveau projet Supabase, je finis par rechercher les mêmes quelques commandes du CLI. Alors je les garde dans un seul fichier. Le voici, mis au propre — et vous pouvez télécharger le Markdown brut en bas pour l'ajouter à vos propres notes.
Installer et vérifier le CLI
J'installe le CLI avec Homebrew et je vérifie la version avant toute chose.
supabase --version
brew upgrade supabase
Ensuite je me connecte et je lie le dossier local à un projet distant :
supabase login
supabase projects list
supabase projects create
cd <dossier-du-projet>
supabase init # crée supabase/config.toml
supabase link
Première migration (base distante neuve)
Voici la séquence que je suis la première fois, contre une base de données distante toute neuve (avec l'extension PostGIS déjà activée sur le distant) :
supabase migration list
supabase migration fetch
supabase db pull --schema auth,storage --debug # récupère le schéma distant
supabase migration new create_building_tables
# éditer le fichier create_*_tables.sql généré
supabase db diff --debug
supabase migration up
supabase db push --include-seed --debug
supabase migration list # le local et le distant devraient être synchronisés
Itérer sur les migrations
À chaque changement suivant, la boucle est plus courte. Le détail important, c'est
que supabase migration fetch écrase les changements locaux : je ne l'exécute
donc que lorsque je veux que le distant l'emporte.
supabase migration list
supabase migration fetch # écrase les changements locaux
supabase db diff # ce qui a changé en local vs distant
supabase db pull --schema auth,storage --debug
supabase migration new create_*_tables
# éditer la migration
supabase migration up # applique le dernier fichier de migration
supabase migration list # voir les migrations encore en avance sur le distant
supabase db push --debug --include-seed
Semer et importer des données
Semer, c'est simplement un fichier : on ajoute supabase/seed.sql et il s'exécute
au db push --include-seed (et au db reset).
Pour importer de vraies données, j'ai essayé plusieurs approches. Téléverser un
.csv via le Table Editor était lent et parfois incomplet chez moi. Utiliser
un client PostgreSQL comme DBeaver pour créer la table en SQL et importer le
CSV était bien plus rapide — une table de 6 colonnes avec une colonne géométrique
et 66 lignes s'est importée sans accroc. Pour les chargements en masse, il y a
pgloader :
brew update
brew install pgloader
pgloader --version
Sauvegarder une instance locale
Arrêter avec --backup conserve les volumes Docker, donc rien n'est perdu :
supabase stop --backup
# inspecter les volumes d'un projet donné
docker volume ls --filter label=com.supabase.cli.project=<nom-du-projet>
Avant toute étape destructrice (comme supabase db reset), je fais un dump de la
base locale pour avoir une référence à comparer :
supabase db start
# référence avant nettoyage
supabase db dump --local -f baseline_before.sql
# ...après suppressions :
# supabase db dump --local -f after.sql
# diff baseline_before.sql after.sql
supabase db reset
Une mise en garde que je réapprends à mes dépens :
supabase db resetefface la base. Sur toute instance contenant de vraies données chargées, faites d'abord un dump de référence.
Téléchargement
Voici l'ensemble sous forme de fichier Markdown — enregistrez-le à côté de vos propres notes de projet :
⬇ Télécharger l'aide-mémoire du CLI Supabase (Markdown)