Estou me perguntando se é possível adicionar algum tipo de verificação para abortar um CTE de modificação de dados se uma atualização for parcialmente bem-sucedida. Em anexo está uma consulta mínima que representa o problema. Gostaria que a consulta falhasse se update_rows não atualizasse as 3 linhas especificadas na cláusula WHERE IN.
Isso é fácil de conseguir se esta consulta for reescrita como uma transação interativa, mas estou me perguntando se é possível conseguir isso mantendo as coisas como um único dado modificando o CTE.
with updated_rows as (
update some_table
set status = 'SUCCEEDED'
where id in ('a', 'b', 'c') and status = 'PENDING'
returning *
), more_updated_rows as (
update another_table
set total = total + 3
where completed = false
returning *
) select * from more_updated_rows