Ce guide explique comment migrer les données d’une instance n8n (version 1.76.2) fonctionnant avec SQLite vers PostgreSQL tout en conservant la structure des tables et en s’assurant que les relations sont bien maintenues.

Prérequis Link to heading

  • Une instance n8n sous Dockerfonctionnant avec SQLite
  • Une instance PostgreSQL avec un utilisateur et une base dédié à n8n
  • Les droits nécessaires pour accéder aux données de la base de données SQLite

Étapes de la migration Link to heading

1. Arrêter n8n Link to heading

docker stop n8n

2. Exportation des données depuis SQLite Link to heading

sqlite3 database.sqlite
.headers on 
.mode csv 

.output credentials_entity.csv 
SELECT * FROM credentials_entity;

.output workflow_entity.csv 
SELECT * FROM workflow_entity;

.quit

3. Conversion des fichiers CSV pour PostgreSQL Link to heading

Avant d’importer les fichiers dans PostgreSQL, il est recommandé de modifier le format des données pour correspondre aux colonnes et éviter les problèmes liés à l’ordre des champs.

Reformatage des credentials Link to heading

Réorganiser les colonnes pour assurer la cohérence avec la structure de la table dans PostgreSQL :

awk -F',' '{
    OFS=",";
    print $2, $3, $4, $5, $6, $1, $7
}' credentials_entity.csv > credentials_entity_clean.csv

Cette commande déplace certaines colonnes pour respecter le bon ordre.

Reformatage des workflows Link to heading

Il est possible d’utiliser csvkit pour sélectionner uniquement les colonnes nécessaires :

sudo apt install csvkit  # Installer csvkit si non présent
csvcut -c name,active,nodes,connections,createdAt,updatedAt,settings,staticData,pinData,versionId,triggerCount,id,meta workflow_entity.csv > workflow_entity_clean.csv

4. Configuration de n8n pour PostgreSQL Link to heading

Si vous utilisez les variables d’environnement pour configurer n8n, vous pouvez les modifier pour utiliser PostgreSQL ou les passer en paramètre lors du démarrage du conteneur.

[...] -e DB_TYPE=postgres -e DB_HOST=localhost -e DB_PORT=5432 -e DB_USER=n8n_user -e DB_PASSWORD=postgres -e DB_DATABASE=n8n [...]

5. Redémarrer n8n Link to heading

docker start n8n

A ce moment, n8n devrait utiliser PostgreSQL comme base de données et générer toutes les tables nécessaires. Il faudra à ce moment là recréer un compte admin pour pouvoir accéder à l’instance.

6. Restauration des données Link to heading

Connectez-vous à la base PostgreSQL :

psql -U n8n_user -d n8n

Importation des credentials Link to heading

COPY credentials_entity FROM '/path/to/credentials_entity_clean.csv' DELIMITER ',' CSV HEADER;

Importation des workflows Link to heading

COPY workflow_entity FROM '/path/to/workflow_entity_clean.csv' DELIMITER ',' CSV HEADER ENCODING 'UTF8';

L’export des données depuis sqlite3 sera encodé en UTF-8 et il convient d’indiquer l’encodage lors de l’importation comme ci-dessus pour s’assurer que les données sont correctement importées.

7. Établir les relations entre les workflows et les projets Link to heading

Une fois les données importées, vous devez créer des relations entre les workflows et les projets :

INSERT INTO public.shared_workflow ("workflowId", "projectId", "role", "createdAt", "updatedAt")
SELECT 
    w.id AS "workflowId",
    p.id AS "projectId",
    'workflow:owner' AS "role",
    NOW() AT TIME ZONE 'UTC' AS "createdAt",
    NOW() AT TIME ZONE 'UTC' AS "updatedAt"
FROM public.workflow_entity w
CROSS JOIN public.project p;

Cette requête associe chaque workflow à un projet en tant que propriétaire.

8. Établir les relations entre les credentials et les projets Link to heading

INSERT INTO public.shared_credentials ("credentialsId", "projectId", "role", "createdAt", "updatedAt")
SELECT c.id as "credentialsId",
       (SELECT id FROM project LIMIT 1) as "projectId",
       'credential:owner' as "role",
       NOW() AT TIME ZONE 'UTC' AS "createdAt",
       NOW() AT TIME ZONE 'UTC' AS "updatedAt"
FROM public.credentials_entity c;

Cette requête associe chaque credentials à un projet en tant que propriétaire.

9. Vérification de la migration Link to heading

Vérifier que les données ont été migrées en vérifiant que les workflows et les credentials existent dans la base PostgreSQL et sont visible dans l’interface web de n8n. Lancez ensuite les workflows pour vérifier qu’ils fonctionnent correctement.

Conclusion Link to heading

La migration des données d’une instance n8n fonctionnant avec SQLite vers PostgreSQL est un processus relativement simple, mais nécessite de suivre les étapes de manière chronologique.

Cette méthode vous permet de migrer proprement votre base n8n vers PostgreSQL, tout en maintenant la cohérence des données et des relations.

Besoin d’aide ? Link to heading

Si vous rencontrez des difficultés ou souhaitez une migration sans souci, contactez-moi pour une assistance technique sur mesure. 🚀

👉 Contactez-moi directement.