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"
Isso se deve obviamente ao fato de que eu esvaziei o banco de dados antes de restaurá-lo do arquivo de despejo (este arquivo vem de um banco de dados de produção) ... ...
Existe uma maneira de desabilitar as restrições e todas as chaves estrangeiras, para todas as tabelas, antes de chamar pg_restore.exe
e, depois, reativar as restrições e chaves estrangeiras.
No SO eu encontrei algo interessante: adiar a verificação de restrição 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 data de 10 anos atrás, sugerindo a retirada e a adição das restrições. Ou alterar o valor de pg_class reltriggers para 0 e isso também seria possível para restrições ... mas temo que seja mais hacking do que uma boa prática ...
O que você aconselha, qual é a melhor prática neste caso? O uso pg_dump.exe
com o -clean
sinalizador cria um dump que ignora as restrições de verificação ao restaurar o banco de dados?
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 não deseja invocar durante o recarregamento 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.