我想编写一个 PostgreSQL 函数,它返回一个表和一个附加列。有没有办法在不手动指定的情况下做到这一点RETURNS TABLE (col1 type, col2 type, ...)
?
例如,考虑以下函数:
CREATE FUNCTION get_users_with_most_videos_since_time(ts TIMESTAMPTZ)
RETURNS SETOF "user" AS $$
SELECT
u.*,
count(v.id) AS vids_since
FROM "user" AS u
INNER JOIN "video" AS v ON v.creator_id = u.id
WHERE v.created_at > ts
GROUP BY u.id
ORDER BY vids_since DESC;
$$ LANGUAGE SQL;
Run Code Online (Sandbox Code Playgroud)
这失败并出现错误:
Run Code Online (Sandbox Code Playgroud)ERROR: return type mismatch in function declared to return "user" DETAIL: Final statement returns too many columns.
公平地说,我们包括了该vids_since
列,该列不存在于"user"
表中。
因此,要解决此问题,我想将其更改为:
CREATE FUNCTION get_users_with_most_videos_since_time(ts …
Run Code Online (Sandbox Code Playgroud)