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