Restauração de Bancos de Dados PostgreSQL com Docker

Posted on: November 27, 2025 06:39 PM

Posted by: Renato

Categories: postgresql Docker

Views: 72

📝 Artigo: Gerenciamento e Restauração de Bancos de Dados PostgreSQL com Docker e pg_dump/pg_restore

 

📝 Artigo: Gerenciamento e Restauração de Bancos de Dados PostgreSQL com Docker e pg_dump/pg_restore

 

 

Introdução

 

Este artigo sumariza os passos essenciais para gerenciar (backup, restauração, limpeza) um banco de dados PostgreSQL contido em um container Docker, utilizando as poderosas ferramentas nativas do PostgreSQL: pg_dump e pg_restore. O foco principal é garantir que os backups sejam criados de forma segura e que os processos de restauração sejam bem-sucedidos e limpos.


 

1. O Desafio da Restauração (Aviso implied data-only restore)

 

Muitas vezes, ao tentar restaurar um backup, o usuário se depara com o aviso: pg_restore: implied data-only restore.

pg_restore: connecting to database for restore

pg_restore: implied data-only restore

Este aviso não é um erro, mas uma indicação de que o arquivo de backup (.backup ou similar) não continha as definições de esquema (comandos CREATE TABLE, CREATE FUNCTION, etc.). O utilitário pg_restore automaticamente assume que você deseja restaurar apenas os dados (--data-only ou -a) nas tabelas que já existem.

Solução: Se o objetivo é restaurar tudo (esquema e dados), o backup original deve ser refeito, garantindo que o esquema seja incluído.


 

2. 🛡️ Criação de um Backup Seguro com pg_dump

 

Para evitar problemas de esquema e garantir uma restauração flexível e limpa, o backup deve ser gerado com flags específicas. O formato mais recomendado é o Custom (-F c) devido à sua compressão e flexibilidade de restauro seletivo.

O comando é executado a partir da máquina local, mas aponta para o serviço PostgreSQL dentro do container (trial_wms_postgres):

Bash

docker exec -t trial_wms_postgres pg_dump -U postgres -F c -Z 9 --clean postgres > trial.backup
Flag Função Benefício
-F c Formato Custom (binário). Permite compressão e restauro seletivo. Mais flexível.
-Z 9 Nível de compressão 9. Reduz o tamanho do arquivo e o tempo de transferência/armazenamento.
--clean Inclui comandos DROP. Garante que o banco de dados de destino será limpo antes de recriar os objetos.

 

3. 🧹 Limpeza e Recriação do Banco de Dados

 

Antes de qualquer restauração completa, especialmente após tentativas falhas, é uma boa prática excluir (DROP) e recriar o banco de dados de destino. Isso garante que não haja objetos residuais que possam interferir no processo.

Importante: Não é possível dropar um banco de dados enquanto se está conectado a ele. Deve-se conectar ao banco de dados padrão de manutenção (template1).

Bash

# 1. Excluir o banco de dados 'postgres'
docker exec -it trial_wms_postgres psql -U postgres -d template1 -c "DROP DATABASE postgres;"

# 2. Recriar o banco de dados 'postgres' com o mesmo proprietário
docker exec -it trial_wms_postgres psql -U postgres -d template1 -c "CREATE DATABASE postgres OWNER postgres;"

 

4. 🔄 Restauração do Novo Backup

 

Com o banco de dados limpo e o backup em formato Custom (-F c) com esquema incluído, a restauração é realizada com pg_restore.

O comando redireciona a entrada do arquivo local (< trial.backup) para o pg_restore em execução dentro do container:

Bash

docker exec -i trial_wms_postgres pg_restore -U postgres -v -d postgres --clean < trial.backup
  • -i: Essencial no docker exec para permitir a entrada de dados via pipe.

  • --clean: Utiliza os comandos DROP que foram incluídos no backup (pelo pg_dump --clean) para garantir uma restauração limpa.

  • -v: Verbose mode, que mostra todos os objetos sendo criados e restaurados.


 

5. ⚠️ Restauração de Backups em Formato SQL

 

Se o backup foi gerado no formato plain text (um arquivo .sql que pode ser aberto em um editor de texto), o utilitário correto a ser usado é o psql, não o pg_restore:

Bash

docker exec -i trial_wms_postgres psql -U postgres -d postgres < arquivo.sql

Este guia abrangente permite o gerenciamento completo e seguro de backups de PostgreSQL em ambientes conteinerizados com Docker.


Flag Descrição Por que usar?
-F t Formato Tar. Melhor do que o formato "plain text" para portabilidade, mas o custom format (-F c) é ainda mais flexível para restauro.
-U postgres Usuário. Garante que o usuário com privilégios máximos seja usado para evitar erros de permissão.
-Z 9 Compressão (Compression level 9). Segurança de armazenamento: Comprime o backup ao máximo (nível 9), economizando espaço e tempo de transferência.
--inserts Insere dados linha por linha. Segurança na Restauração: Cria comandos INSERT em vez de um único COPY, o que facilita a restauração em um ambiente com restrições de permissão.
--if-exists Adiciona IF EXISTS nas instruções DROP. Restauro mais seguro: Previne erros se a tabela ou objeto não existir no banco de dados de destino.
--clean Adiciona comandos DROP antes dos CREATE. Limpeza garantida: Assegura que o banco de dados de destino será limpo de objetos antigos antes de carregar os novos.

3

Share

Donate to Site


About Author

Renato

Developer

Add a Comment
Comments 0 Comments

No comments yet! Be the first to comment

Blog Search


Categories

Laravel (227) PHP (151) linux (124) Variados (110) ubuntu (58) Dicas (58) developer (48) postgresql (45) database (44) sql (42) Docker (32) mysql (31) front-end (31) devops (26) webdev (24) programming (23) tecnologia (19) eloquent (19) aws (19) dba (18) backend (16) OUTROS (17) laravelphp (16) debian (12) dev (12) git (10) react (10) reactjs (10) 100DaysOfCode (10) node (9) PHP Swoole (9) javascript (9) nginx (9) inteligencia-artificial (9) linux-tools (8) Architecture (8) ciencia (7) github (7) vue (7) vim (6) jwt (6) arquitetura (6) windows (6) nodejs (6) api (6) vscode (6) webservice (6) DevSecOps (5) apache (5) macox (5) s3 (5) servers (5) ia (5) authentication (5) reactnative (5) rest (5) Swoole (4) lets-encrypt (4) query (4) Raspberry (4) angularjs (4) inteligenciadedados (4) Padrao de design (4) artigo (4) wsl (4) google (4) npm (4) openai (4) opensource (4) mariadb (4) jenkins (4) Kubernetes (4) gitlab (4) angular (4) autenticacao (4) shell (4) mongodb (4) ssh (3) bash (3) hardware (3) tests (3) macos (3) web (2) jobs (3) websocket (3) politica (3) db (3) mysqli (3) Black Hat (3) RabbitMQ (3) educacao (3) intel (3) CMS (2) sail (3) script (3) performance (3) js (3) blade (3) terminal (3) log (3) mac (3) fedora (3) containers (3) json (3) authorization (3) phpswoole (3) ddd (3) policia (2) neovim (2) golang (2) noticias (2) livros (2) Transcribe (2) ElonMusk (2) redis (2) claude (2) ArchLinux (2) java (2) saude (1) seguranca (2) auth (2) cron (2) phpunit (2) kube (2) multiple_authen (2) laptop (2) gnome (2) powerbi (2) telefonia (2) nvm (2) imagick (2) maps (2) colors (2) Passport (2) JQuery (2) phpfpm (2) autorizacao (2) monitoring (2) Go (2) BigLinux (2) POO (2) LazyVim (2) gource (2) Python (2) Oauth2 (2) android (2) unix (2) magento (2) iot (2) ffmpeg (2) combustivel (2) webhook (2) microservices (2) Curisidades (2) Solid (2) zsh (2) bancodedados (2) tailwind (2) homeOffice (2) html (2) openswoole (2) artificialintelligence (2) security (2) Glacier (1) laraveloctane (1) Deus (1) binaural (1) gpt (1) bolsonaro (1) privacidade (1) linkedin (1) documentation (1) brain (1) adb (1) nvidia (1) host (1) ecommerce (1) c4-models (1) altadisponibilidade (1) octane (1) lucena (1) http (1) TypeScript (1) chatgpt (1) idiomas (1) eventdrive (1) uuid (1) restfull (1) aplicativo (1) optimization (1) mapas (1) Fetch (1) collections (1) RustLang (1) matematica (1) Filament (1) compactar (1) paypal (1) microg (1) forcas armadas (1) militar (1) fullsta (1) smartphones (1) automacao (1) Monitor (1) zend (1) spaceship (1) PKCE (1) l2tp (1) Deepin (1) storage (1) benchmark (1) networking (1) Swoole (1) biologia (1) node-red (1) LETSENCRYPT (1) Grunt (1) Diagramas (1) boot (1) haru (1) dracula (1) TrabalhoEmEquipe (1) Brasil (1) queue (1) agi (1) llama (1) hotfix (1) economia (1) transcription (1) cache (1) Amazon (1) October (1) lumen (1) Hyperf (1) replication (1) faceapp (1) vala (1) cloudstack (1) rpi (1) apple (1) oracle (1) iode (1) ffaa (1) vpn (1) MeioAmbiente (1) firefox (1) composer (1) scheduling (1) Asahi (1) pendrive (1) microservice (1) front (1) cor (1) auth (1) modelagemdedados (1) k8s (1) gasolina (1) wsl2 (1) csv (1) soap (1) piada (1) KubeCon (1) zorin-os (1) spring-boot (1) backup (1) playwright (1) Desenvolvedor (1) Structurizr (1) symfony (1) presenter (1) lider (1) guard (1) tensorflow (1) bootstrap (1) nuance (1) historia (1) dropbox (1) traefik (1) bug (1) akitando (1) llm (1) htm (1) transformers (1) cavalotroia (1) odd (1) m1 (1) Error (1) cinnamon (1) repmgr (1) federal (1) ruby (1) AppSec (1) orm (1) ArquiteturaDeSoftware (1) Passwordless (1) memcached (1) flow (1) compression (1) athena (1) front (1) wine (1) covid19 (0) services (1) phpjasper (1) models (1) kali-linux (1) geojson (1) yarn (1) picpay (1) Monolith (1) banco (1) PNPM (1) podcast (1) n8n (1) LaravelFilament (1) God (1) DesenvolvimentoProfissional (1) sw (1) bigtech (1) postgres (1) NoCookies (1) LeetCode (1) governancadedados (1) prf (1) nosql (1) Lideranca (1) Hackers (1) Bots (1) pytorch (1) nuxt (1) liquid (1) ec2 (1) transaction (1) c4 (1) rancher (1) algoritimo (1) Observability (1) Elasticsearch (1) translate (1) certbot (1) Oh My Zsh (1) ibm (1) escopos (1) usb (1) ckeditor (1) API_KEY_GOOGLE_MAPS (1) Manjaro (1) vicuna (1) coding (1) rust (1) markdown (1) JasperReports (1) Fibonacci (1) community (1) Samurai (1) payment (1) messaging (1) Jesus (1) flutter (1) Migration (1) workflow (1) cqrs (1) kitematic (1) geospacial (1) yeshua (1) data (1) sonarqube (1) Axios (1) pipelines (1) Mozilla (1) kvm (1) GitOps (1) sqlite (1) OOD (0) controllers (0)

New Articles



Get Latest Updates by Email