PostgreSQL¶
O PostgreSQL armazena os dados persistentes do n8n.
Informações desta VPS¶
| Item | Valor |
|---|---|
| Stack | /opt/stacks/n8n/compose.yml |
| Serviço Compose | postgres |
| Container | n8n-postgres-1 |
| Imagem | postgres:16 |
| Banco | n8n |
| Usuário | n8n |
| Porta interna | 5432 |
| Volume Docker | n8n_pgdata |
| Diretório no host | /var/lib/docker/volumes/n8n_pgdata/_data |
| Diretório no container | /var/lib/postgresql/data |
Status¶
Ver o status do serviço¶
Ver somente o container¶
Verificar se o PostgreSQL está pronto¶
Resultado esperado:
Ver a versão instalada¶
Ver a imagem utilizada¶
Logs¶
Ver os últimos 100 registros¶
Acompanhar os logs em tempo real¶
Procurar erros¶
Procurar conexões recusadas¶
Operação¶
Reiniciar somente o PostgreSQL¶
Interrupção do n8n
Reiniciar o PostgreSQL interrompe temporariamente o acesso do n8n ao banco.
Parar somente o PostgreSQL¶
Iniciar o PostgreSQL parado¶
Recriar somente o PostgreSQL¶
Acesso com psql¶
Entrar no banco n8n¶
Sair do psql¶
Listar bancos¶
Dentro do psql:
Listar tabelas¶
Dentro do psql:
Listar schemas¶
Dentro do psql:
Ver conexões ativas¶
Dentro do psql:
Ver tamanho do banco¶
Dentro do psql:
Ver tamanho das tabelas¶
Dentro do psql:
SELECT
schemaname,
relname,
pg_size_pretty(pg_total_relation_size(relid)) AS tamanho
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC;
Ver quantidade de conexões¶
Dentro do psql:
Consultas diretas pelo terminal¶
Listar bancos sem entrar no psql¶
Listar tabelas¶
Ver tamanho do banco¶
docker exec n8n-postgres-1 \
psql -U n8n -d n8n \
-c "SELECT pg_size_pretty(pg_database_size('n8n'));"
Ver conexões ativas¶
docker exec n8n-postgres-1 \
psql -U n8n -d n8n \
-c "SELECT pid, usename, datname, client_addr, state FROM pg_stat_activity ORDER BY pid;"
Backup¶
Criar diretório de backups¶
Criar backup lógico do banco n8n¶
docker exec n8n-postgres-1 \
pg_dump -U n8n -d n8n -Fc \
> /opt/backups/postgres/n8n-$(date +%Y%m%d-%H%M%S).dump
O formato -Fc cria um backup compactado no formato custom do PostgreSQL.
Criar backup em SQL puro¶
docker exec n8n-postgres-1 \
pg_dump -U n8n -d n8n \
> /opt/backups/postgres/n8n-$(date +%Y%m%d-%H%M%S).sql
Listar backups¶
Verificar o conteúdo de um backup custom¶
Caso pg_restore não esteja instalado no host:
Restauração¶
Operação destrutiva
Uma restauração pode sobrescrever dados existentes. Faça backup do estado atual antes de restaurar.
Restaurar backup custom¶
docker exec -i n8n-postgres-1 \
pg_restore \
-U n8n \
-d n8n \
--clean \
--if-exists \
< /opt/backups/postgres/NOME_DO_BACKUP.dump
Restaurar backup SQL¶
Volume persistente¶
Ver o volume¶
Ver o diretório usado no host¶
docker inspect n8n-postgres-1 \
--format '{{range .Mounts}}{{println .Source "->" .Destination}}{{end}}'
Ver o uso de espaço do volume¶
Listar os arquivos do volume¶
Não editar diretamente
Não altere manualmente os arquivos dentro de /var/lib/postgresql/data. O PostgreSQL controla esses arquivos internamente. Edição manual é uma receita bastante eficiente para fabricar um banco corrompido.
Manutenção¶
Ver bancos e respectivos tamanhos¶
docker exec n8n-postgres-1 \
psql -U n8n -d n8n \
-c "SELECT datname, pg_size_pretty(pg_database_size(datname)) FROM pg_database ORDER BY pg_database_size(datname) DESC;"
Executar VACUUM ANALYZE¶
O VACUUM ANALYZE atualiza estatísticas e ajuda o otimizador de consultas.
Ver transações longas¶
docker exec n8n-postgres-1 \
psql -U n8n -d n8n \
-c "SELECT pid, now() - xact_start AS duracao, state, query FROM pg_stat_activity WHERE xact_start IS NOT NULL ORDER BY xact_start;"
Ver bloqueios¶
docker exec n8n-postgres-1 \
psql -U n8n -d n8n \
-c "SELECT pid, locktype, mode, granted FROM pg_locks ORDER BY granted, pid;"
Atualização da imagem¶
Criar backup antes da atualização¶
docker exec n8n-postgres-1 \
pg_dump -U n8n -d n8n -Fc \
> /opt/backups/postgres/n8n-pre-update-$(date +%Y%m%d-%H%M%S).dump
Ver a versão atual¶
Baixar a imagem configurada¶
Recriar o serviço¶
Verificar a saúde¶
Verificar os logs¶
Mudança de versão principal
Atualizar de PostgreSQL 16 para 17, por exemplo, não é uma simples troca de imagem. Mudanças de versão principal exigem migração planejada, geralmente com pg_dump e pg_restore ou pg_upgrade.
Troubleshooting¶
PostgreSQL não inicia¶
Verificar:
PostgreSQL aparece como unhealthy¶
Verificar o healthcheck:
Testar manualmente:
n8n não conecta ao banco¶
Verificar o PostgreSQL:
Verificar os logs do banco:
Verificar os logs do n8n:
Verificar as variáveis do n8n sem mostrar a senha:
docker inspect n8n-n8n-1 \
--format '{{range .Config.Env}}{{println .}}{{end}}' \
| grep -E '^DB_POSTGRESDB_(HOST|PORT|DATABASE|USER)='
Banco sem espaço em disco¶
Verificar:
Muitas conexões¶
Verificar:
Boas práticas¶
- Fazer backup antes de atualizações.
- Testar periodicamente a restauração dos backups.
- Não publicar a porta
5432diretamente na internet. - Não editar os arquivos internos do volume.
- Não remover o volume
n8n_pgdata. - Monitorar espaço em disco.
- Evitar mudanças automáticas de versão principal.
- Verificar logs após reinícios e atualizações.