Postgres SubQuery Limit для обновления не соблюдает лимит - PullRequest
2 голосов
/ 07 марта 2019

Я недавно обновил свой 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?

...