Notícias
Novo Data Center no Uzbequistão: Lançamento da Localização em Tashkent
Serverspace Black Friday
IS
abril 24, 2026
Atualizado abril 24, 2026

Como executar o n8n com PostgreSQL (e migrar do SQLite com segurança)

Por padrão, o n8n armazena dados em SQLite, um banco baseado em arquivo que não exige configuração. Ele funciona bem para testes locais, mas apresenta limitações em produção: bloqueia o arquivo durante gravações, não oferece backups seguros em tempo real e não é compatível com o modo fila (queue mode), necessário para escalar horizontalmente com workers.

O PostgreSQL resolve esses problemas e é a opção recomendada para qualquer instalação self-hosted do n8n além de uso pessoal.

Neste guia, você vai configurar o n8n com PostgreSQL usando Docker Compose e também aprender como migrar uma instância existente em SQLite de forma segura. A configuração leva cerca de 15 minutos e não exige experiência prévia com bancos de dados.

Por que migrar para PostgreSQL?

O SQLite armazena todos os dados em um único arquivo e bloqueia completamente esse arquivo a cada gravação. Quando vários workflows são executados ao mesmo tempo, as operações ficam enfileiradas e podem falhar por timeout. Em casos extremos, o arquivo pode ser corrompido. Além disso, não é possível fazer um backup consistente enquanto o n8n está em execução — copiar o arquivo durante uma gravação pode resultar em dados inconsistentes.

O PostgreSQL utiliza bloqueio em nível de linha (row-level), permitindo execuções paralelas sem conflitos. Ele suporta backups em tempo real com pg_dump, sem necessidade de interromper o n8n. Também é obrigatório para o uso do modo fila (com Redis e múltiplos workers) e para configurações com alta disponibilidade.

Se o seu n8n é usado por uma equipe ou processa mais do que algumas dezenas de workflows por dia, o PostgreSQL é a escolha mais adequada.

Pré-requisitos

  • Um servidor Linux (Ubuntu 22.04 ou 24.04) com pelo menos 2 GB de RAM e 20 GB de disco;
  • Docker e Docker Compose instalados;
  • Acesso via SSH ao servidor;
  • Para migração: acesso ao diretório de dados atual do n8n (/home/node/.n8n ou volume do Docker).

Você pode contratar uma VPS na Serverspace e deixá-la pronta em poucos minutos. Se preferir evitar a instalação manual, a Serverspace também oferece uma VPS com n8n pré-instalado como aplicação 1-Click.

Passo 1. Gerar uma chave de criptografia

O n8n criptografa todas as credenciais armazenadas usando esta chave. Se você perdê-la, todas as credenciais salvas ficarão permanentemente inacessíveis.

Gere uma chave e armazene-a em um gerenciador de senhas:

openssl rand -hex 32

Passo 2. Criar os arquivos do projeto

Crie um diretório e adicione três arquivos dentro dele:

mkdir ~/n8n-postgres && cd ~/n8n-postgres

.env

POSTGRES_USER=postgres

POSTGRES_PASSWORD=your_strong_postgres_password

POSTGRES_DB=n8n

 

POSTGRES_NON_ROOT_USER=n8n_user

POSTGRES_NON_ROOT_PASSWORD=your_strong_n8n_password

 

N8N_ENCRYPTION_KEY=paste_your_generated_key_here

N8N_HOST=0.0.0.0

N8N_PROTOCOL=http

N8N_PORT=5678

GENERIC_TIMEZONE=UTC

Nota: o valor correto para DB_TYPE é postgresdb, e não "postgres". Esse é um erro comum que faz o n8n voltar automaticamente para o SQLite sem exibir um aviso claro.

docker-compose.yml

volumes:

  db_storage:

  n8n_storage:

services:

  postgres:

    image: postgres:16-alpine

    restart: always

    environment:

      - POSTGRES_USER

      - POSTGRES_PASSWORD

      - POSTGRES_DB

      - POSTGRES_NON_ROOT_USER

      - POSTGRES_NON_ROOT_PASSWORD

    volumes:

      - db_storage:/var/lib/postgresql/data

      - ./init-data.sh:/docker-entrypoint-initdb.d/init-data.sh

    healthcheck:

      test: ['CMD-SHELL', 'pg_isready -h localhost -U ${POSTGRES_USER} -d ${POSTGRES_DB}']

      interval: 5s

      timeout: 5s

      retries: 10

  n8n:

    image: docker.n8n.io/n8nio/n8n

    restart: always

    environment:

      - DB_TYPE=postgresdb

      - DB_POSTGRESDB_HOST=postgres

      - DB_POSTGRESDB_PORT=5432

      - DB_POSTGRESDB_DATABASE=${POSTGRES_DB}

      - DB_POSTGRESDB_USER=${POSTGRES_NON_ROOT_USER}

      - DB_POSTGRESDB_PASSWORD=${POSTGRES_NON_ROOT_PASSWORD}

      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}

      - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}

    ports:

      - 5678:5678

    volumes:

      - n8n_storage:/home/node/.n8n

    depends_on:

      postgres:

        condition: service_healthy

O volume n8n_storage em /home/node/.n8n continua sendo necessário mesmo com PostgreSQL. O n8n ainda armazena metadados da chave de criptografia nesse diretório.

O parâmetro DB_POSTGRESDB_HOST deve corresponder ao nome do serviço no Docker Compose ("postgres"), e não "localhost".

init-data.sh

Este script cria o usuário não-root do banco de dados na primeira inicialização. Crie o arquivo e execute chmod +x init-data.sh:

#!/bin/bash

set -e;

psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB"

  CREATE USER "$POSTGRES_NON_ROOT_USER" WITH PASSWORD '$POSTGRES_NON_ROOT_PASSWORD';

  GRANT ALL PRIVILEGES ON DATABASE "$POSTGRES_DB" TO "$POSTGRES_NON_ROOT_USER";

  GRANT ALL ON SCHEMA public TO "$POSTGRES_NON_ROOT_USER";

EOSQL

Passo 3. Iniciar a stack

docker compose up -d

O Docker irá baixar as imagens, iniciar o PostgreSQL, aguardar a verificação de saúde (health check) ser concluída e, em seguida, iniciar o n8n. O n8n se conecta ao PostgreSQL e cria automaticamente todas as tabelas necessárias.

Acesse http://your-server-ip:5678 e crie sua conta de administrador. O primeiro usuário registrado recebe automaticamente permissões de administrador.

Passo 4. Verificar a configuração

Confirme que o n8n está usando o PostgreSQL listando as tabelas:

docker compose exec postgres psql -U n8n_user -d n8n -c "\dt"

Você deve ver tabelas como workflow_entity, credentials_entity e execution_entity.

Crie um workflow de teste com um Manual Trigger e um nó Set, execute-o e verifique se a execução aparece no histórico.

Depois, adicione uma credencial de teste, reinicie o n8n com docker compose restart n8n e confirme que a credencial continua acessível.

Migrando do SQLite para PostgreSQL

Se você já tem uma instância do n8n rodando com SQLite, utilize o comando export:entities da CLI (disponível a partir do n8n v1.67, novembro de 2025). Ele exporta todos os tipos de entidades e permite importação entre bancos de dados diferentes.

  1. Pare o n8n: docker compose stop n8n
  2. Exporte os dados:
  3. docker exec -u node -it \

      n8n export:entities --outputDir=/home/node/.n8n/backup

    Adicione --includeExecutionHistoryDataTables=true caso queira incluir o histórico de execuções (isso pode gerar um volume de dados muito grande).

  4. Configure o PostgreSQL seguindo os passos 1 a 3 acima. Use a mesma N8N_ENCRYPTION_KEY da sua instância antiga. Isso é essencial: uma chave diferente tornará todas as credenciais ilegíveis.
  5. Importação:
  6. docker exec -u node -it \

      n8n import:entities --inputDir=/home/node/.n8n/backup

  7. Inicie o n8n e verifique se os workflows, credenciais e usuários foram migrados corretamente e continuam intactos.

Para versões do n8n anteriores à 1.67, que não possuem o comando export:entities, utilize:

  • n8n export: workflow --all;
  • n8n export: credentials --all --decrypted.

Esses comandos exportam apenas workflows e credenciais, mas não incluem usuários, projetos ou pastas.

Recomendações pós-configuração

Backups

Execute backups regulares do banco de dados usando pg_dump. Diferente do SQLite, esse processo funciona enquanto o n8n está em execução:

docker compose exec postgres pg_dump -U n8n_user -d n8n > backup_$(date +%F).sql

Agende esse comando via cron (por exemplo, diariamente às 3h da manhã). Mantenha vários backups recentes e teste periodicamente a restauração para garantir que estão válidos.

HTTPS

Coloque um reverse proxy (como Nginx ou Caddy) na frente do n8n e configure um certificado TLS via Let’s Encrypt. Evite expor diretamente a porta 5678 na internet.

Sem HTTPS, credenciais de login e dados de workflows podem trafegar em texto puro.

Limpeza de execuções

O n8n salva o resultado de cada execução de workflow. Desde 2025, a limpeza automática (pruning) vem ativada por padrão: 14 dias de histórico e até 10.000 registros.

Esse comportamento pode ser ajustado com as variáveis de ambiente:

  • EXECUTIONS_DATA_MAX_AGE (em horas);
  • EXECUTIONS_DATA_PRUNE_MAX_COUNT.

Problemas comuns

  • O n8n inicia, mas usa SQLite em vez de PostgreSQL

    Verifique se DB_TYPE está definido como postgresdb (não postgres).
    Confirme também se todas as variáveis DB_POSTGRESDB_* estão presentes no ambiente. Se alguma estiver ausente, o n8n pode voltar automaticamente para SQLite sem avisar.

  • “Connection refused” na inicialização

    Certifique-se de que DB_POSTGRESDB_HOST corresponde ao nome do serviço no Docker Compose ("postgres"), e não "localhost". Os containers se comunicam pela rede interna do Docker, não pelo loopback.

    Também verifique se o healthcheck do container PostgreSQL está passando antes do n8n tentar se conectar.

  • Credenciais vazias após a migração

    A N8N_ENCRYPTION_KEY na nova instância não coincide com a antiga. O n8n não consegue descriptografar credenciais criadas com uma chave diferente. Confirme o valor da chave e repita a importação se necessário.

  • Erro “Column already exists” durante a migração

    Isso ocorre quando os dados são importados em um banco onde o n8n já executou migrações anteriormente. O banco de destino deve estar vazio antes da importação. Se necessário, apague e recrie o banco de dados e execute a importação novamente.

Conclusão

Três arquivos e um único comando docker compose up são suficientes para ter uma instância de n8n pronta para produção com PostgreSQL.

Essa configuração permite backups seguros em tempo real, execução simultânea de workflows e um caminho claro para escalar com queue mode quando necessário.

Para começar mais rápido, você também pode implantar o n8n na Serverspace com um ambiente pré-configurado e adicionar o PostgreSQL seguindo os passos deste guia.

Avaliação:
5 fora de 5
Аverage rating : 5
Avaliado por: 8
CEP 01311-930 São Paulo Avenida Paulista, nº 1765, 7º andar, Cj. 72, CV 10172, Bela Vista
+ 55 11 5118-1047
ITGLOBAL.COM BR LTDA
Usamos cookies para melhorar sua experiência no Serverspace. Ao continuar a navegar em nosso site, você concorda com o Uso de Cookies e com a Política de Privacidade.