Ответ 1
Я подозреваю, что это имеет какое-то отношение к этой строке в docs -
Основной запрос и запросы WITH выполняются (по существу) в то же время. Это означает, что последствия изменения данных утверждение в WITH не видно из других частей запроса, другое чем путем считывания вывода RETURNING. Если два таких модифицирующих данных операторы пытаются изменить одну и ту же строку, результаты не определено.
Хотя я бы подумал, что идентификатор будет доступен, поскольку он не изменяется в подзапросе WITH, может быть что-то происходит с видимостью строки. Термин "неуказанный" довольно расплывчатый, это действительно может быть вопросом для списка postgres, так что один из гуру может иметь трещину в нем...
EDIT: чтобы предоставить немного больше информации, я также попытался заменить DELETE
на SELECT *
, и это вернуло ожидаемые строки. Моя немедленная реакция заключалась в том, что если он сможет найти строки для их возвращения, он должен будет найти их для их удаления. Но если я думаю об этом больше, этот тест поддерживает цитату, поскольку выражение о модификации данных в паре с оператором, не изменяющим данные, приводит к ожидаемым результатам, тогда как два оператора, изменяющих данные, создают неожиданные результаты.