Oi Tiago, para sua pergunta vou inserir apenas todos os registros que não
violaram a chave!
Mas de qualquer forma é uma alternativa.
Valeu, Obrigado!

2009/8/20 Tiago Adami <[email protected]>

> 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
>
>
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a