desativar restrições antes de usar o pg_restore.exe

16

Quando tento executar pg_restore.exeum arquivo de despejo de um banco de dados, ele lança dezenas de erros, todos iguais:

ERROR: insert or update on table "someTable" violates foreign key constraint "aConstraintName"

Obviamente, isso se deve ao fato de eu ter esvaziado a base de dados antes de restaurá-la do arquivo de despejo (esse arquivo vem de um banco de dados de produção) ... então é claro que nenhuma restrição de chave estrangeira pode ser aceitável se uma tabela referenciada estiver vazia ...

Existe uma maneira de desativar as restrições e todas as chaves estrangeiras, para todas as tabelas, antes de eu ligar pg_restore.exee depois reativar as restrições e as chaves estrangeiras.

No SO, achei algo interessante: adiar a verificação de restrições para confirmar o tempo . Mas acho que não posso ligar pg_restore.exede dentro psql.exedepois de adiar as restrições.

Há também este post , que remonta há 10 anos, sugerindo descartar e adicionar novamente as restrições. Ou para alterar o valor dos reltriggers de pg_class para 0 e isso também seria possível para restrições ... mas receio que seja mais invasão do que boas práticas ...

O que você aconselha, qual é a melhor prática neste caso? O uso pg_dump.exe com o -cleansinalizador cria um despejo que ignora a verificação de restrições ao restaurar o banco de dados?

Stephane Rolland
fonte
Postado aqui, caso alguém encontre isso mais tarde: stackoverflow.com/questions/12093654/…
Craig Ringer

Respostas:

28

Você já tentou a --disable-triggersopção pg_restore?

De acordo com a documentação: use isso se você tiver verificações de integridade referencial ou outros gatilhos nas tabelas que você não deseja chamar durante a recarga de dados.

Observe que isso só é válido para uma --data-onlyrestauração e requer que a --superuser=usernameopção seja aprovada também.

Matthew Wood
fonte
E funciona como um encanto ...
Stephane Rolland