Quando tento executar pg_restore.exe
um 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.exe
e 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.exe
de dentro psql.exe
depois 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 -clean
sinalizador cria um despejo que ignora a verificação de restrições ao restaurar o banco de dados?
fonte
Respostas:
Você já tentou a
--disable-triggers
opçãopg_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-only
restauração e requer que a--superuser=username
opção seja aprovada também.fonte