Olá, Miguel. Se entendi bem o seu problema você quer que o processo continue sendo executado, inserindo apenas o primeiro registro que possua a chave duplicada, certo? Ao invés de parar a execução gerando uma exceção, continuaria sendo executada inserindo os registros de outras chaves.
Bem, para fazer isso, te dou duas alternativas: 1) Remova os registros duplicados antes de inserí-los, OU 2) Crie um arquivo com vários comandos INSERT delimitados por ponto-e-virgula e execute-o através do "psql" [1] via console (CMD no Windows). Assim quando houver um registro duplicado, ele apenas o avisará e continuará executando a próxima linha (desde que você não use o parâmetro "-1" ou "--single-transaction"). A alternativa 1 deve ser utilizada se você estiver inserindo registros pela aplicação. A 2 apenas para carga de dados. [1] http://www.postgresql.org/docs/8.4/static/app-psql.html -- Tiago J. Adami Dois Vizinhos - Paraná - Brasil 2009/8/20 MIGUEL JOSE DE LIMA <[email protected]> > Oi André, tento estudar o máximo possível antes de fazer alguma pergunta ao > grupo, > mas confesso que sou totalmente inexperiente no postgresql, ou seja, > confesso que > estou tendo dificuldades em entender o seu exemplo: > Quando há uma violação, conforme o seu exemplo, o processamento irá > continuar? > e as mensagem de violação, como fasso para ignora-las ou invia-las para um > "lixo" > temporário? > Se puder continuar me ajudando, fico agradecido! > > Valeu! > > 2009/8/20 Andre Fernandes <[email protected]> > > Como disse antes, podes usar uma trigger para ignorar registros >> duplicados durante a inserção, dessa forma se o registro já existir na base >> de dados, a trigger ignoraria esse comando. Dessa forma, não terias >> problemas de duplicidade alguma. >> >> Abraços, >> André. >> >> 2009/8/20 MIGUEL JOSE DE LIMA <[email protected]> >> >>> Caro colega, talvez eu não expliquei direito: Eu não desejo registros >>> duplicados!!! >>> Então, não basta deletar a constraint. E por outro lado eu não tenho >>> conhecimento suficiente para afirmar que há uma aberração em outro produto, >>> mas tenho conhecimento suficiente para dizer que em muitos processamentos a >>> INSERSSÃO DE REGISTROS ignorando os erros de duplicidades é muito mais >>> rapido, sem ter a necessidade de >>> verificar a duplicidade da chave e inclusive a do registro! >>> >>> Mas valeu, Muito Obrigado >>> >>> 2009/8/20 Roberto Mello <[email protected]> >>> >>>> 2009/8/20 MIGUEL JOSE DE LIMA <[email protected]>: >>>> >>>> > Pessoal, >>>> > Em um procedimento para inserir várias linhas/registros (INSERT ... >>>> SELECT >>>> > ....) como >>>> > posso contornar o erro de chave duplicada, sem interromper o >>>> > processamento??? >>>> > >>>> > Pesquisei na lista e não achei nada. E através do google achei um >>>> exemplo >>>> > que utiliza uma SubQuery >>>> > com a clausula "NOT IN (SELECT ...)". Será que esta é a melhor forma? >>>> > Não existe nada parecido com o "INSERT IGNORE ..." do MySQL? >>>> (Postgresql 8.3 >>>> > ou 8.4) >>>> >>>> Não. Esse tipo de aberração grotesca só se vê num produto como o MySQL. >>>> >>>> Se quiser o mesmo efeito no PostgreSQL, faça um DROP na constraint, >>>> faça suas inserções, e depois re-crie a chave ou constraint. >>>> >>>> Roberto >>>> _______________________________________________ >>>> pgbr-geral mailing list >>>> [email protected] >>>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral >>>> >>> >>> >>> _______________________________________________ >>> pgbr-geral mailing list >>> [email protected] >>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral >>> >>> >> >> >> -- >> André de Camargo Fernandes >> >> >> >> _______________________________________________ >> pgbr-geral mailing list >> [email protected] >> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral >> >> > > _______________________________________________ > pgbr-geral mailing list > [email protected] > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > >
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
