我正在尝试执行UPDATE后返回一组行。

这样的事情。

UPDATE Notis new_noti SET notis = '{}'::noti_record_type[]
FROM (SELECT * FROM Notis WHERE user_id = 2 FOR UPDATE) old_noti
WHERE old_noti.user_id = new_noti.user_id RETURNING unnest(old_noti.notis);

但是postgres抱怨是正确的:



我应该如何实施呢?

也就是说,RETURNINGSELECT?之后是UPDATE ed数组中的一组行。

我知道一个函数可以使用RETURNS SETOF实现此目的,但宁愿不要这样做。

最佳答案

使用WITH statement:

WITH upd AS (
    UPDATE Notis new_noti SET notis = '{}'::noti_record_type[]
    FROM (SELECT * FROM Notis WHERE user_id = 2 FOR UPDATE) old_noti
    WHERE old_noti.user_id = new_noti.user_id RETURNING old_noti.notis
    )
SELECT unnest(notis) FROM upd;

10-06 05:17