Introdução
A PAPER & FORM vende impressões em papel e objetos de mesa. Uma mudança para outro serviço se aproxima, e a proprietária precisa saber exatamente quais pedidos um backup pode recuperar. Ter um arquivo não basta: ele deve incluir cada pedido e seus itens em um ponto de recuperação claro.
Você fará um pequeno pedido, salvará um backup PostgreSQL no formato personalizado e adicionará outro pedido para entender por que ele fica fora da cópia. Noções básicas de terminal são suficientes. Banco, ferramentas e site estão preparados; você não escreverá SQL nem instalará software. Clientes, preços e pedidos são fictícios; não há pagamento nem serviço de e-mail.
Use Original Shop para a loja ativa e Workstation para os comandos. Restored Copy é um destino independente vazio para o próximo laboratório; não restaure nele nesta unidade. Cada unidade começa com seus próprios dados. Preserve o programa fornecido e uploads/. Este é um exercício de exportação lógica, não recuperação completa de desastres nem recuperação para um instante específico (PITR).
Registrar o pedido que deve entrar no backup
Nesta etapa, você registrará um pedido real com seus itens. Comece em Original Shop. A faixa azul identifica o banco original, shop_source. Abra Explore the collection ↗. O catálogo oferece Print pair a $18.00 por unidade e Desk tray a $26.00. Abra Orders na navegação superior, selecione R-101 e leia sua linha: dois Print pair totalizam $36.00. Selecione Download receipt ↓ e leia o texto salvo. Ele contém referência, cliente, item, quantidade e total. Volte por PAPER & FORM.
Um banco de dados guarda registros estruturados. Aqui, orders contém referência e cliente de cada pedido; order_items guarda seus itens. Cada item aponta para o pedido pai. Guardar somente nomes ou totais perderia a relação necessária à loja. A página e o recibo leem essas linhas realmente relacionadas.
Mude para Workstation. pwd mostra o diretório atual; ls lista seus arquivos:
pwd
/home/labex/project/shop-backup
ls
Você deve ver backups, shopctl e uploads. Salve as exportações em backups/. uploads/packing-note.txt é um arquivo alheio à tarefa e deve ficar intacto. Uma exportação lógica não inclui arquivos externos ao banco.
./shopctl executa o auxiliar preparado no diretório atual. Sua ação identity exibe conexões reais. Um papel é a conta do banco que define permissões. Host e porta identificam o serviço. Execute:
./shopctl identity
Encontre a origem shop_source com o papel cliente somente leitura d09_reader e o destino shop_copy com o papel gravável d09_copy, ambos em 127.0.0.1:5432. Compartilhar servidor não significa compartilhar banco. O papel da cópia não pode conectar à origem. O site usa outro papel para escrever na origem. São limites de treinamento, não proteção contra alguém com acesso de administrador do sistema.
Em Original Shop, abra Collection e role até Place an order. Antes de enviar, leia Writing to: shop_source · ORIGINAL SHOP. Use exatamente:
| Campo | Valor |
|---|---|
| Reference | R-103 |
| Name | Rae |
| Item | Print pair |
| Quantity | 2 |
Selecione Place order ↗. A página abre R-103, para Rae, com dois Print pair e total $36.00. Esse é o pedido limite, obrigatório no backup. O formulário original recusa referências desconhecidas ou exclusivas da cópia sem gravar registros. Enviar R-104 antes de um cutoff-kept.dump válido e protegido também retorna Keep the earlier point first, sem escrever nada. Se pretendia R-103, volte a Collection e corrija a referência. Isso protege a sequência desta prática; uma loja de produção normalmente não espera um backup para aceitar pedidos. Se um R-103 existente tiver cliente, item ou quantidade errados, corrija apenas esse registro reservado em Workstation:
./shopctl correct source R-103
O auxiliar mostra o destino real e altera somente R-103 para Rae / Print pair / 2. Ele recusa referências originais de base e preserva outros pedidos, registros posteriores, uploads e todos os arquivos. É uma correção explícita do estudante, nunca uma ação da verificação. Corrija e releia antes de exportar. Se um clique repetido usar uma referência existente, verá Already recorded; abra Orders para ler o registro em vez de duplicá-lo.
Volte a Workstation. records mostra os dados relacionados reais; os últimos números são quantidade e preço unitário em centavos:
./shopctl records source
Encontre R-103 | Rae | Print pair | 2 | 1800 e total $98.00 nos três pedidos. Você adicionou o pedido necessário sem alterar R-101 e R-102.
Salvar um arquivo consistente no formato personalizado
Nesta etapa, você salvará os três pedidos confirmados. Um ponto de recuperação é o estado capturado pela exportação, não o nome ou horário de modificação do arquivo. O pg_dump do PostgreSQL faz um instantâneo consistente: tabelas relacionadas vêm de uma mesma visão do banco mesmo com outros usuários ativos. Neste exercício, termine R-103 antes de exportar e espere o fim da exportação antes do próximo pedido. Essa ordem define o limite sem comparar relógios.
Continue em Workstation. pg_dump exporta um banco; pg_restore lê seus formatos de arquivo. Confira as versões instaladas:
pg_dump --version
pg_restore --version
Ambos devem indicar PostgreSQL 14; o servidor também é 14. Um pg_dump antigo pode falhar com um servidor mais recente. Não esconda um erro de versão salvando um arquivo vazio. As ferramentas compatíveis já estão preparadas.
Mostre as conexões novamente antes de escolher a origem:
./shopctl identity
Os serviços de conexão do PostgreSQL são configurações salvas. service=shop-source escolhe shop_source e seu papel somente leitura; service=shop-copy escolhe o destino independente. --dbname seleciona essa conexão. Sempre nomeie o serviço explicitamente, sem depender dos padrões do cliente.
--format=custom cria o formato comprimido do PostgreSQL para pg_restore, em vez de um script SQL de texto. --file nomeia a saída. --no-privileges omite as concessões de acesso da origem. Para um arquivo personalizado, pg_dump --no-owner é ignorado; a propriedade é omitida depois, passando --no-owner ao pg_restore. Essa opção permite que o papel de destino seja dono dos objetos restaurados. O comando lê a origem e escreve somente o arquivo local indicado:
pg_dump --dbname=service=shop-source --format=custom --no-privileges --file=backups/cutoff.dump
Uma exportação bem-sucedida normalmente não imprime nada. Não digite o próximo pedido comercial até terminar. Se houver erro de conexão ou arquivo, confira pwd, ./shopctl identity e o caminho de saída e tente novamente. Repetir substitui backups/cutoff.dump; faça isso apenas enquanto a origem ainda estiver no ponto desejado. Uma exportação posterior captura dados posteriores.
pg_restore --list lê o índice sem importar:
pg_restore --list backups/cutoff.dump
Perto do início, encontre Format: CUSTOM, dbname: shop_source e versões compatíveis do banco exportado e cliente. Mais abaixo estão orders, order_items, dados, sequências e restrições. Essas entradas descrevem a estrutura, mas não provam que as linhas comerciais corretas estão presentes. Restaurar e ler as linhas é uma evidência mais forte.
A verificação testa seu arquivo real em um novo banco descartável, incluindo o pedido limite e seus itens relacionados. Ela não restaura sua aba Restored Copy. Preserve o arquivo para a próxima etapa.
Antes de avançar, leia o resultado e conserve o arquivo verificado. cp duplica um arquivo com outro nome. chmod a-w retira permissão de escrita de todos os usuários e protege os dois nomes contra sobrescrita acidental por pg_dump --file:
cp backups/cutoff.dump backups/cutoff-kept.dump
chmod a-w backups/cutoff.dump backups/cutoff-kept.dump
Faça isso somente após passar na verificação do backup. Exportar diretamente para qualquer arquivo protegido agora falha com Permission denied, sem substituir seu ponto. Se o nome original for apagado, cp backups/cutoff-kept.dump backups/cutoff.dump recupera os bytes. O arquivo conservado é uma segunda cópia local para erros comuns, não proteção externa contra desastres.
Distinguir pedidos posteriores do ponto salvo
Nesta etapa, a origem avançará enquanto o arquivo continuará no estado anterior. Abra Original Shop, depois Collection, e leia Writing to: shop_source · ORIGINAL SHOP antes de escrever. Envie:
| Campo | Valor |
|---|---|
| Reference | R-104 |
| Name | Sol |
| Item | Desk tray |
| Quantity | 1 |
O novo registro soma $26.00. Em Orders, confirme R-101, R-102, R-103 e R-104. R-104 foi confirmado após o término de pg_dump, portanto fica fora de backups/cutoff.dump. Um backup não é uma conexão viva que continua recebendo pedidos. Não exporte agora sobre o arquivo limite.
Em Workstation, releia a origem:
./shopctl records source
A saída agora inclui R-104 | Sol | Desk tray | 1 | 2600 e total $124.00. A origem continua utilizável; você não destruiu dados para encenar uma recuperação. Listar o arquivo novamente ainda mostra sua estrutura original:
pg_restore --list backups/cutoff.dump
A verificação restaura apenas em um banco de teste descartável. Espera R-101 a R-103 e exclui R-104. Isso demonstra um ponto de recuperação, não só a existência de um arquivo. Deixe Restored Copy vazia nesta unidade.
Se errou R-104, ./shopctl correct source R-104 exibe a origem e corrige apenas esse pedido de prática existente para Sol / Desk tray / 1, preservando todos os anteriores. Uma referência desconhecida é recusada pelo formulário; corrija e envie novamente.
Se apagou ou substituiu cutoff.dump, recupere os bytes anteriores conservados, não um instantâneo futuro novo. Em Workstation, chmod u+w devolve ao dono a escrita nesse único arquivo; cp recupera o conteúdo e chmod a-w protege novamente:
chmod u+w backups/cutoff.dump
cp backups/cutoff-kept.dump backups/cutoff.dump
chmod a-w backups/cutoff.dump
Se o arquivo foi apagado, pule o primeiro comando e use diretamente a cópia conservada. Depois repita a verificação. Não apague R-104 nem retroceda a origem: registros comerciais posteriores devem permanecer. Se todas as cópias de um ponto anterior forem perdidas, uma nova exportação lógica não recria o passado. Por isso a etapa anterior verifica e conserva uma cópia protegida antes de permitir o avanço da origem. O próximo laboratório independente fornece o mesmo ponto para você se concentrar na restauração segura.
Resumo
Você criou um pedido real, exportou um arquivo PostgreSQL personalizado e consistente e distinguiu esse ponto salvo de um pedido posterior da origem. A verificação testou relações realmente restauradas em um banco descartável. O próximo laboratório independente abrirá o estado salvo como uma cópia utilizável da loja.


