Я недавно обновил свой postgres db с 9.5.4 до 10.7 и заметил странное поведение с существующим запросом.
Урезанная версия выглядит так:
update
mytable
set
job_id = 6
where
id in (
select * from
(
select id from
mytable
where job_id is null
limit 2
) x for update)
and job_id is null
Я бы ожидал, что число строк будет обновлено до 2, но вместо этого он обновляет все записи, которые соответствуют подзапросу без ограничения. Если я удалю оператор for update
или соответствующий оператор job_id is null
, обновленные записи будут равны 2, как и ожидалось. Прежде чем мы обновим этот запрос, мы обновим правильное количество строк.
Изменилось ли какое-либо поведение в 10.x?