n8n com PostgreSQL: como configurar no Docker Compose
Aprenda a configurar o n8n com PostgreSQL no Docker Compose: compose completo, migração do SQLite, export:entities e backup com pg_dump.
Por Redação Eleven Host · @robson.direitodigital · 27 de outubro de 2026 · 7 min de leitura

Capa da Redação Eleven Host para o guia: n8n com PostgreSQL: como configurar no Docker Compose Arte: Eleven Host
Para usar o n8n com PostgreSQL no Docker Compose, defina DB_TYPE=postgresdb e as variáveis DB_POSTGRESDB_* no serviço do n8n, acrescente um serviço postgres ao compose e mantenha o volume n8n_data, onde fica a chave de criptografia.
Este guia mostra o docker-compose.yml completo, como subir e conferir, como migrar um n8n que já roda com SQLite, uma alternativa com export:entities e como fazer backup do PostgreSQL. A senha do exemplo é fictícia. Troque pela sua.
Por que trocar o SQLite pelo PostgreSQL
Por padrão, o n8n usa o SQLite, um banco que fica num único arquivo, para guardar credenciais, execuções e fluxos. Segundo a documentação do n8n, dá para trocar por PostgreSQL. É uma opção suportada, que pode ser útil se o volume de dados crescer ou se você quiser administrar o banco à parte. Este guia não promete ganho de desempenho: a troca é uma escolha de arquitetura.
Em julho de 2026, a documentação do n8n lista como suportadas as duas últimas versões principais mantidas do PostgreSQL, a 17 e a 18. Derivados como AlloyDB, CockroachDB e YugabyteDB não são suportados. O exemplo abaixo usa a imagem postgres:18.
Antes de começar
Faça um backup antes de mexer no banco. O guia Atualizar n8n no Docker: passo a passo com backup mostra como copiar o volume.
Há um ponto que merece atenção. Mesmo com PostgreSQL, a pasta /home/node/.n8n continua guardando dados importantes, como a chave de criptografia e os logs. Por isso, mantenha o volume n8n_data montado. Se a chave se perder, as credenciais salvas ficam ilegíveis.
Trocar o DB_TYPE não leva os dados do SQLite para o PostgreSQL. O banco novo começa vazio. Para manter fluxos e credenciais, siga a seção de migração mais abaixo.
O docker-compose.yml com PostgreSQL
O exemplo abaixo é uma versão simplificada do exemplo oficial do repositório n8n-hosting, que usa um teste de saúde com pg_isready para o n8n só subir depois que o banco responder. Trabalhe na pasta do n8n, como em Instalar n8n na VPS: passo a passo com Docker. Se você já tem esse compose, mantenha as variáveis dele (como N8N_HOST, WEBHOOK_URL e o fuso) e só acrescente as DB_* e o serviço postgres. Se o volume do seu n8n tem outro nome, mantenha o nome dele.
Primeiro, crie o arquivo .env com a senha do banco e restrinja a leitura:
nano .env
POSTGRES_PASSWORD=troque-por-senha-forte
chmod 600 .env
Depois, no docker-compose.yml, use este conteúdo:
services:
postgres:
image: postgres:18
restart: always
environment:
- POSTGRES_USER=n8n
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=n8n
volumes:
- db_storage:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -h localhost -U n8n -d n8n"]
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=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
ports:
- "127.0.0.1:5678:5678"
volumes:
- n8n_data:/home/node/.n8n
depends_on:
postgres:
condition: service_healthy
volumes:
db_storage:
n8n_data:
Repare em dois detalhes de segurança. O serviço postgres não tem ports: a porta 5432 não é publicada, e só o n8n fala com o banco pela rede interna do compose. E a porta 5678 do n8n está ligada só a 127.0.0.1, para o acesso externo passar por um proxy reverso, como mostra o guia Nginx proxy reverso: como configurar na sua VPS.
Quer conhecer os planos de n8n? Eles começam em R$ 19,90/mês no n8n Essencial; confira na loja o que cada plano inclui. Ver planos de n8n
Subir e conferir
Numa instalação nova, suba os serviços em segundo plano:
docker compose up -d
Confira se os dois contêineres estão de pé:
docker compose ps
Acompanhe o registro do n8n para ver se ele conectou ao banco, e saia com Ctrl+C:
docker compose logs -f n8n
Se o n8n não conectar, confira a senha no .env e se o nome do banco e do usuário no serviço n8n são iguais aos do serviço postgres.
Migrar um n8n que já usa SQLite
Se o seu n8n já roda com SQLite e tem fluxos, siga estes passos na ordem. Faça o backup do guia de atualização do n8n antes do passo 1.
Passo 1. Com o n8n antigo ainda rodando, exporte os fluxos e as credenciais. A opção --backup equivale a --all --pretty --separate:
docker compose exec n8n n8n export:workflow --backup --output=/home/node/.n8n/backup/fluxos/
docker compose exec n8n n8n export:credentials --backup --output=/home/node/.n8n/backup/credenciais/
As credenciais saem criptografadas. Como o volume n8n_data, com a chave, é o mesmo, o n8n novo consegue lê-las. Evite a opção --decrypted sem necessidade, porque ela gera um arquivo com senhas em texto puro.
Passo 2. Pare os serviços, edite o compose (serviço postgres e variáveis DB_*) e suba de novo:
docker compose down
docker compose up -d
Não use docker compose down -v: a opção -v apaga os volumes, e com eles a chave e os dados.
Passo 3. Importe os fluxos e as credenciais para o banco novo:
docker compose exec n8n n8n import:workflow --separate --input=/home/node/.n8n/backup/fluxos/
docker compose exec n8n n8n import:credentials --separate --input=/home/node/.n8n/backup/credenciais/
Passo 4. Abra o painel e confira os fluxos. Reative e teste cada um; para fluxos com webhook, veja o guia de webhook no n8n. O histórico de execuções e a conta de dono não vão com esses comandos, então pode ser preciso criar a conta de acesso de novo no primeiro acesso.
O arquivo SQLite antigo continua no volume n8n_data. Não apague até ter certeza de que está tudo certo.
Alternativa: export:entities e import:entities
A documentação do n8n traz outro caminho para levar os tipos de dado de um banco para outro, como do SQLite para o PostgreSQL. Os comandos são n8n export:entities --outputDir=... e n8n import:entities --inputDir ... --truncateTables true. O banco de destino deve estar vazio, a não ser que você use --truncateTables. O histórico de execuções fica de fora por padrão; a opção --includeExecutionHistoryDataTables=true o inclui, mas o volume pode ser grande.
A documentação traz uma dica: o n8n limita nomes de fluxo e de credencial a 128 caracteres, e o SQLite não tem esse limite. Um nome maior dá o erro "Data too long" na importação. Se isso acontecer, encurte o nome e exporte de novo.
Backup do PostgreSQL do compose
O backup do volume protege a chave, mas o PostgreSQL também merece uma cópia própria. Este comando grava um arquivo de despejo no formato customizado:
docker compose exec postgres pg_dump -U n8n -Fc n8n > n8n-postgres.dump
Guarde o arquivo fora da VPS e proteja o acesso a ele. Para repetir o backup automaticamente, agende o comando com o cron; o guia Como usar crontab: agende tarefas na VPS Linux explica como.
Checklist da troca
- Fiz backup do volume do n8n antes de mexer.
- O volume
n8n_datacontinua montado, com a chave. - O
.envtem a senha do banco e está comchmod 600. - O serviço
postgresnão publica a porta 5432. - As variáveis
DB_*do n8n batem com o usuário, o banco e a senha dopostgres. - Se havia SQLite, exportei fluxos e credenciais antes de trocar.
- Não usei
down -v. - Importei, conferi e testei os fluxos.
- Mantive o arquivo SQLite antigo até ter certeza.
- Agendei o
pg_dumpe guardo a cópia fora da VPS.
Quer outra opção para o seu n8n? Veja os planos a partir de R$ 19,90/mês no n8n Essencial; confira na loja o que cada plano inclui. Conhecer o n8n
Perguntas frequentes
Preciso trocar o SQLite pelo PostgreSQL?
Não. O SQLite é o padrão do n8n. O PostgreSQL é uma opção suportada para quem quer administrar o banco à parte ou espera um volume de dados maior.
Trocar o DB_TYPE leva meus fluxos para o PostgreSQL?
Não. O banco novo começa vazio. Exporte fluxos e credenciais antes, ou use o export:entities, e importe depois da troca.
Por que manter o volume n8n_data se o banco agora é PostgreSQL?
Porque a pasta /home/node/.n8n guarda a chave de criptografia e os logs. Sem a chave, as credenciais salvas ficam ilegíveis.
Quais versões do PostgreSQL o n8n suporta?
Em julho de 2026, a documentação do n8n lista as versões 17 e 18. Confira a documentação antes de escolher a imagem.