всё работает, но мне это надо поместить в функцию теперь и получается, что мне результат не нужен. Как бы его граммотно выкинуть? У кого нибудь есть идеи?
PERFORM https://www.postgresql.org/docs/current/plpgsql-statements.html#PLPGSQL-STATEMENTS-GENERAL-SQL
Это как он мне поможет?
PERFORM Вам поможет, да. С другой стороны — почему бы просто не убрать RETUNRING, если возможно (например, если myfunc() — не volatile, то какая разница, выполняется она или нет)?
Не поможет. Я добавляю новую запись и мне нужны новые id в эту функцию. Функция как раз volatile и мне нужно получить именно новые id и передать их в функцию
Хмм... похоже на то, в самом деле. Ну тогда всё-таки верните результат в какую-то переменную, что ж делать.
Тогда я вообще не понял проблемы. Накидайте пример что ли.
Ну вот посмотрите: https://dbfiddle.uk/MP_ukKkP Как тут избавиться от dummy?
Ого, как подробно! Да, это именно оно. Я хотел в переменную, но Returning id into _переменная ругается, если вставилось больше 1 строки. Остановился на cte шке, но мне все равно не нравится что то такое решение
Я как-то не вижу другого (казалось бы, синтаксис тупо не позволяет). :( Может, ещё кто-то что-то другое придумает...
execute $$insert...returning myfnc(...)$$; Вроде правильный результат, если я правильно понял - возврат из returning просто отбрасывается, хоть и выполняется: https://dbfiddle.uk/_AqMiz3b
Да, правильный. Но это, всё же, выполнение "динамического" SQL (мне почему-то показалось, что автор вопроса не имел этого в виду)... Может, ему как раз подойдёт. :)
Хмммммммм интересно Завтра попробую
Да, внезапно. Абьюзом потрохов PL/pgSQL разве что https://dbfiddle.uk/a2toj5Ib
Да уж. ;( Про это bug report надо написать, мне кажется.
А где написано, что FOUND можно что-то присваивать (а если можно, то зачем)?
А где написано, что нельзя? Написано только, что это переменная, и она принимает значения true и false (видимо, это boolean).
Нигде, насколько я знаю. Просто это на первый взгляд неожиданно / нелогично, IMHO.
По-моему наоборот. Так-то я просто поискал какую-нибудь заранее объявленную переменную, эта первой пришла на ум.
Нужно больше мнений, мне кажется. ;)
Или от Тома Лейна. (Который просто скажэт, что мы переделываем синтаксис, и INSERT/UPDATE/DELETE могут работать без INTO дажэ с RETURNING).
Обсуждают сегодня