/ Banco de dados

Restore em Postgres evitando determinadas tabelas

É comum em ambientes de desenvolvimento ou homologação precisarmos de massa de dados para testar um relatorio ou uma consulta mais complexa. A preocupação com a performance é evidente nestes cenários.
Neste artigo, falaremos sobre a possibilidade de realizar restore de banco em Postgres, descartando determinadas tabelas, afim de evitar a carga de dados desnecessária para o ambiente.

Detalhe

O exemplo a seguir é realizado em ambiente Linux e faz uso de backup realizado através do pg_dump com formato padrão.

Passos

Na pasta onde esta o arquivo de backup, faremos o uso do pg_restore com a opção -l para listar as estruturas do backup juntamente com o grep para retirar desta lista o comando de restore dos dados da tabela desejada (a estrutura permanece).
Não se preocupe, neste momento não estaremos restaurando nada. Apenas gerando um arquivo com as estruturadas que queremos no final do restore:

$ pg_restore -l DB_SIGA_PROD.dump | grep -v 'TABLE DATA public.tb_doc_anexo' > restore.list

Com a execução do comando, temos a lista gerada no arquivo restore.list sem a orientação para restore dos dados da tabela public.tb_doc_anexo.
lista
Caso precise informar uma segunda ou terceira tabela, repita o grep novamente com o nome das tabelas. Exemplo:

$ pg_restore -l DB_SIGA_PROD.dump | grep -v 'TABLE DATA public.tabela_a' | 
grep -v 'TABLE DATA public.tabela_b' > restore.list

Agora, basta realizar o restore fazendo o uso da opção -L informando a lista de estruturas desejada:

$ pg_restore -U postgres -O -L restore.list -v -d DB_SIGA_HOM DB_SIGA_PROD.dump

Aguarde o restore e tchau, brigado.
gato-espantado
Baralho! é só isso mesmo!?
Sim... testado e aprovado no ambiente do cliente PMCG.

Referências