Ao tentar executar esta consulta, minha suposição foi que o PostgreSQL executará a atualização duas vezes seguidas com id = 0 tendo contador inicial = 0 e terminaria com contador = 11, mas na verdade é executado apenas uma vez e resulta em contador = 6 .
Alguém pode ajudar a descobrir o porquê? Passei um bom tempo tentando descobrir isso e não consigo entender por que isso acontece.
with duplicatedids as
((select 0 as idx, 6 as v) union
(select 1 as idx, 5 as v))
update verify_seq_update
set counter = counter + duplicatedids.v
from duplicatedids
where verify_seq_update.id <= duplicatedids.idx ;
Um
UPDATE
pode modificar muitas linhas, mas cada uma delas será modificada apenas uma vez.Para uma explicação mais detalhada, consulte a
UPDATE
seção da documentação do Postgres: