restaurando o banco de dados do Postgres: pg_restore -vs- apenas usando o psql

16

Estou descartando meu banco de dados do Postgres usando pg_dump (no formato de texto sem formatação) e restaurando-o simplesmente usando o psql (com o-f opção).

O que suscita a pergunta: estou perdendo alguma coisa por não usar pg_restore, que parece uma ferramenta de restauração especializada (em comparação com a genérica psql)?

Eu posso controlar opções como desabilitar gatilhos e coisas assim usando pg_dumpparâmetros. Para que, então, é pg_restoreusado? formatos de despejo sem texto simples?

Marcus Junius Brutus
fonte
4
Do manual : " pg_restore é um utilitário para restaurar um banco de dados PostgreSQL a partir de um arquivo gerado pelo pg_dump em um dos formatos não-texto-puro "
a_horse_with_no_name

Respostas:

19

Se você criou um dump no formato SQL, tudo o que você pode usar é psql.

Se você criou um dump de formato personalizado ( pg_dump -Fc) ou de diretório ( pg_dump -Fd), você pode e deve usarpg_restore .

Os dumps personalizados e de formato de diretório oferecem muitas vantagens sobre os dumps simples de script SQL, e eu os uso exclusivamente. Você pode restaurar seletivamente apenas algumas tabelas / esquemas, pode optar por incluir apenas o esquema, apenas os dados ou ambos no momento da restauração, etc. Muitas das opções que você precisa especificar no pg_dumpmomento com dumps no formato SQL podem ser escolhidas em restore- hora se você usar um dump de formato personalizado e pg_restore.

Se não fosse para compatibilidade Tenho certeza que o padrão para pg_dumpseria -Fcformato (personalizado).

Você não pode converter um despejo no formato SQL em formato personalizado ou em diretório sem restaurá-lo em um banco de dados PostgreSQL e depois despejar o banco de dados restaurado.

Craig Ringer
fonte
Também é possível renomear funções em lote e manipular dados como você poderia em um arquivo sql com um bom regexp?
velop
1
Não, mas você pode, pg_restoresem um dbnameargumento, transformá-lo em um dump no formato SQL, se precisar. Você não pode fazer o contrário.
Craig Ringer
@ CraigRinger existe alguma diferença de velocidade usando psql vs usando pg_dump para restauração?
Nikunj Sardhara
2
@NikunjSardhara Geralmente não, mas pg_restoresuporta restauração paralela, e se você usar isso, será MUITO mais rápido.
Craig Ringer