У меня есть функция PostgreSQL ниже, чтобы обновить набор записей, и я хочу, чтобы он возвращал тот же список записей после обновления. Прямо сейчас он возвращает список записей до их обновления (flag_read=FALSE
в возвращенном наборе). Я знаю, что обновление работает хорошо, потому что когда я выполняю запрос к таблице после выполнения функции, я вижу flag_read=TRUE
.
Как я могу изменить функцию, чтобы она возвращала обновленный набор записей?
CREATE OR REPLACE FUNCTION base.mark_all_notifications_as_read()
RETURNS SETOF base.notification AS $$
BEGIN
RETURN QUERY
WITH unread_notifications AS (
UPDATE base.notification
SET flag_read=TRUE
WHERE flag_read=FALSE
AND created_by_id=base.get_current_user_id()
RETURNING id
)
SELECT * FROM base.notification a
WHERE a.id IN (SELECT id FROM unread_notifications);
END;
$$ language plpgsql VOLATILE STRICT SECURITY DEFINER;