小编bca*_*tle的帖子

返回带有附加列的表的函数

我想编写一个 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)

这失败并出现错误:

ERROR:  return type mismatch in function declared to return "user"
DETAIL:  Final statement returns too many columns.
Run Code Online (Sandbox Code Playgroud)

公平地说,我们包括了该vids_since列,该列不存在于"user"表中。

因此,要解决此问题,我想将其更改为:

CREATE FUNCTION get_users_with_most_videos_since_time(ts …
Run Code Online (Sandbox Code Playgroud)

postgresql datatypes view functions set-returning-functions

6
推荐指数
1
解决办法
4380
查看次数