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

Responder a