Miss Supatool

Migrer un projet Supabase vers un autre

Publié le · Mis à jour le · par

Read in English

En bref. Pour migrer un projet Supabase, on recrée d'abord la structure dans la cible, puis on copie les tables dans l'ordre des clés étrangères et les fichiers seau par seau, avant de remettre les séquences à niveau. Les comptes utilisateurs, les fonctions Edge, les secrets et les réglages de connexion se reprennent à part.

Changer d'organisation, repartir d'un projet propre après un prototype, dupliquer une base pour des tests : un jour, il faut copier un projet Supabase vers un autre. Voici ce qu'il faut déplacer, dans quel ordre, et les pièges qui font échouer une migration.

Ce qu'il faut déplacer

Un projet Supabase, c'est plusieurs couches, qui ne se copient pas de la même façon :

Deux méthodes

En ligne de commande. On exporte la base (avec pg_dump ou la commande supabase db dump de la CLI), puis on la restaure dans le nouveau projet avec psql. C'est la voie la plus complète pour la base, mais elle demande d'installer des outils et d'avoir la chaîne de connexion des deux bases. Les fichiers du stockage restent à copier à part.

Par les API, depuis le navigateur. Chaque projet expose une API REST (PostgREST) qui publie la description de ses tables et de ses clés, et une API de stockage qui liste, télécharge et envoie les fichiers. De quoi copier données et fichiers sans rien installer. Pour créer la structure, il faut en plus l'API de gestion de Supabase.

Les étapes d'une migration sans mauvaise surprise

  1. Préparez la cible. Créez le projet, ou choisissez-en un vide.
  2. Recréez la structure avant les données. Une ligne ne s'insère pas dans une table qui n'existe pas.
  3. Copiez les tables dans l'ordre des clés étrangères. Si membres.club_id pointe vers clubs.id, copiez clubs d'abord, sinon chaque membre sera refusé.
  4. Copiez les fichiers, seau par seau.
  5. Remettez les séquences à niveau. C'est l'oubli le plus fréquent. Vous copiez 1 250 commandes avec leurs identifiants de 1 à 1 250 ; la séquence de la cible, elle, est restée à 1. La première commande créée par votre application demandera l'identifiant 1 et sera refusée. Un setval corrige cela : select setval(pg_get_serial_sequence('public.commandes', 'id'), (select max(id) from public.commandes));
  6. Vérifiez : comptez les lignes des deux côtés, puis changez l'URL et les clés dans votre application et testez-la.

Deux pièges de plus pendant la copie : les déclencheurs de la cible s'exécutent et peuvent réécrire ce que vous insérez (une colonne updated_at, un journal d'audit), et une colonne GENERATED ALWAYS refuse toute valeur. Il faut alors écarter ces colonnes de la copie.

Comment Miss Supatool vous aide

Miss Supatool est une application web qui mène cette migration en cinq étapes : Projets, Contenu, Structure, Copie, Rapport.

Les clés ne sont jamais enregistrées : elles restent en mémoire le temps de l'onglet. La création de projet, la copie de structure et les séquences passent par un relais, avec votre jeton d'accès personnel Supabase.

Supabase déclare les clés anon et service_role obsolètes d'ici fin 2026, au profit des clés sb_publishable_… et sb_secret_…. Miss Supatool reconnaît une clé sb_secret_…, mais la signale : sur un projet neuf, elle n'a pas été acceptée partout où la service_role du même projet l'était. Si les appels échouent, reprenez la service_role tant qu'elle existe.

Ce que l'outil ne copie pas

Les fichiers transitent par votre navigateur : un objet très volumineux peut échouer. La création de projet et la copie de structure ne marchent qu'avec des projets hébergés par Supabase.

Miss Supatool est une application indépendante, ni affiliée à Supabase ni approuvée par Supabase. Supabase est une marque de son propriétaire.

Questions fréquentes

Peut-on migrer un projet Supabase sans ligne de commande ?

Oui, pour la structure, les données et les fichiers : les API de Supabase suffisent. C'est le parti pris de Miss Supatool. Les comptes utilisateurs et les réglages du projet restent à reprendre à part.

Les politiques RLS sont-elles recopiées ?

Oui, avec la structure, pour le schéma choisi. Les politiques du stockage, qui vivent dans un autre schéma, sont à rejouer séparément.

Pourquoi faut-il la clé service_role ?

Elle contourne la RLS : c'est ce qui permet de lire toutes les lignes de la source et d'écrire dans la cible. Elle ouvre donc toute la base. Utilisez-la depuis un appareil de confiance et régénérez-la au moindre doute. Supabase la déclare obsolète d'ici fin 2026, au profit des clés sb_secret_….

La migration peut-elle abîmer le projet source ?

Miss Supatool ne l'écrit jamais : son client refuse toute requête d'écriture vers la source avant de l'envoyer. Et par défaut, chaque étape commence par une simulation qui lit tout et n'écrit rien.

Sources