Bom Dia, Estou fazendo implementações de Backup E restauração.
Mas Percebi que após restaurar , ao tentar incluir um registro ele Barra no erro:
Duplicar o valor da chave Viola a restrição de unicidade...
Achei estranho e fui verificar PGAdmin.
Tinha apenas 3 registros na tabela, com o ID(pk) na sequencia 75,76,77…
Mas ao tentar incluir ele tenta jogar no ID 75, e não no 78 como deveria ser…
Acho que para resolver isso tenho que atualizar minha sequencia… Como Faço isso?
Boa tarde… Muito estranho mesmo… Tanto que antes de fazer o restore eu Mando apagar as Tabelas e As Sequencias Atuais.
Sobre o Setval, eu já havia lido a documentação sobre ele, mas como vou saber em qual id colocar?
Vou ter que dar um select e verificar o ultimo número toda vez? ou Tem algo mas simples?
[quote=samuk]Boa tarde… Muito estranho mesmo… Tanto que antes de fazer o restore eu Mando apagar as Tabelas e As Sequencias Atuais.
Sobre o Setval, eu já havia lido a documentação sobre ele, mas como vou saber em qual id colocar?
Vou ter que dar um select e verificar o ultimo número toda vez? ou Tem algo mas simples?[/quote]
Pois é, se o backup não recupera o valor da sequência teria que fazer isso em todo backup. =S
Mas tem algo de errado com ele. Você tá fazendo o backup pelo pgAdmin? Ele tem umas opções lá na hora de tirar o backup, dá uma olhada pra ver se não tem algo relacionado.
Eu costumo fazer pelo terminal, um simples pg_dump, funciona muito bem.
public class Backup {
DaoPrincipal daoPrincipal = new DaoPrincipal();
DaoCombustivel daoCombustivel = new DaoCombustivel();
DaoDizimo daoDizimo = new DaoDizimo();
static String DataBase = "DatabaseControlesTeste";
public void backup(){
try{
ProcessBuilder pb;
@SuppressWarnings("unused")
Process p;
pb = new ProcessBuilder("C:/a/pg_dump.exe ", "-i", "--username", "postgres" , "--format", "custom", "--blobs", "--file", "D:\\Teste200.backup",DataBase);
pb.environment().put("PGPASSWORD", "PSsistemas");
pb.redirectErrorStream(true);
p = pb.start();
}catch(Exception ex){
JOptionPane.showMessageDialog(null, ex);
}
}
public void restore(){
if (!daoPrincipal.verificaDatabase()) {
daoPrincipal.criarDatabase();
}
if (daoCombustivel.verificaTabela()){
daoCombustivel.excluirTabela();
}
if (daoDizimo.verificaTabela()){
daoDizimo.excluirTabela();
}
try{
ProcessBuilder pb;
@SuppressWarnings("unused")
Process p;
pb = new ProcessBuilder("C:/a/pg_restore.exe ", "-i", "--username", "postgres" ,"--dbname" ,""+DataBase , "D:\\Teste200.backup");
pb.environment().put("PGPASSWORD", "PSsistemas");
pb.redirectErrorStream(true);
p = pb.start();
}catch(Exception ex){
JOptionPane.showMessageDialog(null, ex);
}
}
Amigo, acho que estou com a mesma dúvida que você. Quando vou fazer o restore, me retorna vários erros como este:
pg_restore: criando FK CONSTRAINT solicitacao_emp_cod_fkey
pg_restore: [arquivador (bd)] Erro no registro do TOC 1963; 2606 24640 FK CONSTRAINT solicitacao_emp_cod_fkey postgres
pg_restore: [arquivador (bd)] could not execute query: ERRO: restrição “solicitacao_emp_cod_fkey” para relação “licenca” já existe
Comando foi: ALTER TABLE ONLY licenca
ADD CONSTRAINT solicitacao_emp_cod_fkey FOREIGN KEY (emp_cod) REFERENCES empresa(emp_cod);
AVISO: erros ignorados durante restauração: 27
pelo que entendi, ele está tentando gravar por cima da base já criada.
Eu devo excluir a base que está rodando para depois substituir?
O que devo fazer? Valeu!