如何在 Postgresql 中创建用户定义的函数?

How to create a user-defined function in Postgresql?

我在 Postgres 中有以下查询。我想要一个函数,用户可以在其中使用函数调用动态定义 record_year 和 record_month 的值,而不必在查询语句中指定。这样,相同的查询可以重复用于 record_year 和 record_month 的不同用户输入值(在本例中)。有人可以帮我吗?

SELECT x.sid, x.record_year, x.record_month, y.addr
FROM x
FULL OUTER JOIN y
  ON x.sid = y.sid
WHERE x.record_time='23:50' 
  and x.record_year='2020' 
  and x.record_month='1'
group by x.station_id, x.record_year, x.record_month, y.addr;

函数调用可能类似于 select function_name(record_year, record_month);

当您return生成结果时,函数应定义为returns table()。如果您只想 return 结果,则不需要 PL/pgSQL。 SQL 函数就足够了。

create function get_data(p_time time, p_year int, p_month int)
  returns table (sid int, record_year int, record_month int, addr text)
as
$$
  SELECT x.sid, x.record_year, x.record_month, y.addr
  FROM x
    FULL OUTER JOIN y ON x.sid = y.sid
  WHERE x.record_time p_time
    and x.record_year = p_year
    and x.record_month = p_month
  group by x.station_id, x.record_year, x.record_month, y.addr
$$
language sql
stable;

调整了 returned 列的数据类型 - 我只是根据名称猜到了它们。

请注意,由于 table x

上的条件,您的完整外部联接实际上是 left join

因为它是一个集合 returning 函数,所以在 FROM 子句中像 table 一样使用它:

select *
from get_data(time '23:50', 2020, 1);