join-ами или почему получаю такую ошибку?
ERROR: FOR UPDATE cannot be applied to the nullable side of an outer join
Очевидно же - если в приджойненной таблице по условию джойна ничего не нашлось, то и лочить нечего.
Так я лочу не приджойненую таблицу, а записи, которые подбираются в итоге: with batch(id) as ( SELECT vsct.id FROM vsct left join table_2 r on r.id=vsct.release_id where r.id is null order by id for update skip locked ), del as ( delete from vsct where id in (select id from batch) returning * )
А "записи, которые подбираются в итоге" — это записи отношения, которое является внешним соединением отношений vsct и table_2, нет (т.е. lock должен накладываться на обе таблицы)? (Ехидно) Вот до чего доводит использование аляповатых конструкций вместо NOT EXISTS. Но можете просто указать FOR UPDATE OF vsct SKIP LOCKED, если переписывать не хочется.
работа уже выполнена, просто хотел разобраться. Я так понял итог такой, если в "области" select могут быть указаны колонки из других таблиц, то эти таблицы так же лочятся.
Не имеет значения, что там указано в SELECT list (хоть SELECT 1 напишите). Важно, откуда выбираются записи в отношение-результат.
Да, я это и имел ввиду. Спасибо!
Мне неочнвидно. То есть нечего лочить — ну, не лочь, делов-то.
Обсуждают сегодня