Em 26 de abril de 2016 11:09, Alan Tavares <peixespo...@gmail.com> escreveu:

> Estou com um problema no UPSERT estou usando o PG 9.5 e usando o recurso
> insert on conflict do ...
> tenho uma tabala de pedidos com um id serial e uso isso para fazer
> referencia do pedido no sistema.
> Acontece que quando recebo uma notificação de venda uso esse recurso do
> UPSERT para inserir se for um novo pedido
> e se ja existir fazer um update no status do pedido. O problema é que
> quando isso ocorre o id é incrementado mesmo ocorrendo o update ou não
> fazendo nada
> existe alguma maneira facil de só incrementar se houver realmente um
> insert.
>

Como campos serial possuem como default o "nextval" da sequence, esse valor
é incrementado mesmo quando rodas um "insert into" e qualquer tipo de erro
ocorre. O rollback não "decrementa" o valor da sequence, logo o
comportamento está de acordo com o padrão já existente antes do recurso "on
conflict".

Como provavelmente ocorre um erro por baixo, que é tratado pelo "on
conflict", o incremento da sequence ocorre naturalmente.

O que poderia fazer, talvez, seria uma PL para fazer esse upsert
manualmente, se você não quer que este comportamento ocorra, verificando se
irá fazer o insert ou update e deixando de utilizar o recurso. Não creio
que seja um caso de bug ou problema no recurso, talvez uma possível
melhoria.

Espero ter ajudado.

[]'s
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a