Atualizando a Versão do PostgreSQL no n8n
Este passo a passo orienta como trocar a versão do PostgreSQL usada pelo n8n. O processo envolve fazer backup do banco atual, atualizar a imagem no Docker, e restaurar os dados.
- Acesse o servidor via SSH
- Faça um backup do banco atual
- Interrompa os containers
- Atualize o docker-compose.yml
- Remova o volume antigo
- Suba os container novamente
- Restaure o backup
- Repita a restauração do backup
1 . Acesse o servidor via SSH
Abra o terminal do seu computador e conecte-se ao servidor onde o n8n está instalado:
ssh usuario@seu-servidor
Substitua ‘usuario‘ e ‘seu-servidor‘ pelas credenciais corretas de acesso.
1.1 . Navegue até a pasta do projeto N8N
Após conectar no servidor, vá até o diretório onde está o arquivo docker-compose.yml:
cd /opt/n8n

2. Faça um backup do banco de dados atual
Antes de qualquer alteração, é essencial criar um backup do banco atual.
Execute o seguinte comando dentro da pasta /opt/n8n:
docker exec -t n8n-db pg_dump -U n8n_user -d n8n > backup.sql

Esse comando vai gerar um arquivo chamado ‘backup.sql‘ com todos os dados atuais do banco.
3. Interrompa os containers
Vamos interromper o ambiente para evitar qualquer conflito durante a atualização:
docker compose down
4. Atualize o docker-compose.yml
Abra o arquivo docker-compose.yml para editar:
nano docker-compose.yml

Localize a seção referente ao banco de dados e substitua pela nova imagem desejada. Exemplo com PostgreSQL 15:
postgres:
image: postgres:15
container_name: n8n-db
environment:
– POSTGRES_DB=n8n
– POSTGRES_USER=postgres
– POSTGRES_PASSWORD=your_password
volumes:
– n8n_db_data:/var/lib/postgresql/data

5. Remova o volume de dados antigo
Como estamos trocando de versão do banco, é necessário remover o volume anterior para evitar conflitos:
docker volume rm n8n_n8n_db_data

6. Suba os containers com a nova versão
Agora, com tudo atualizado, suba os containers novamente:
docker compose up -d

7. Restaure o backup no novo banco
Após o container do banco estar rodando, restaure os dados usando o backup feito anteriormente:
docker exec -i n8n-db psql -U n8n_user -d n8n < backup.sql

Pode ser que o container ainda esteja inicializando e o banco ainda não esteja pronto. Se aparecer um erro, aguarde alguns segundos e repita o comando.
Obs.: Se ao tentar restaurar o backup for exibido um erro de conflito (ex: tabelas já existem), remova todas as tabelas antes de tentar novamente.
Com o comando docker exec -it n8n-db psql -U n8n_user -d n8n você irá acessar o postgreSql.

Após acessar em seu banco postgreSQL você irá utilizar o comando abaixo para apagar todas as tabelas existentes do banco:
DO $$ DECLARE r RECORD; BEGIN EXECUTE 'SET session_replication_role = replica'; FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = 'public') LOOP EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(r.tablename) || ' CASCADE'; END LOOP; EXECUTE 'SET session_replication_role = origin'; END $$;

Após executar o comando para deletar, verifique se ainda restam tabelas, utilizando o comando \dt. Caso existam, execute os comandos do passo anterior novamente até que todas sejam removidas
Para sair do postgress digite \q e enter.
8. Tente Restaurar o Backup Novamente
Com as tabelas antigas removidas, tente restaurar novamente:
docker exec -i n8n-db psql -U n8n_user -d n8n < backup.sql

Se tudo correu bem, o n8n agora está rodando com a nova versão do PostgreSQL e seus dados foram restaurados com sucesso.