【发布时间】:2012-10-24 08:10:18
【问题描述】:
在用户定义的函数中,如何返回由连接其他表的投影形成的表?
这是一个简单的例子
CREATE FUNCTION something123(character varying(100)) RETURNS TABLE (a integer, b character varying(300)) AS
$$
SELECT b.year, p.materialUsed FROM bestBefore b join packaged p on b.id=p.id WHERE id=$1;
$$
LANGUAGE SQL
;
它总是在 TABLE 处出错。您将如何让该 select 语句的内容返回?
我正在使用 Postgres 8.1.21
【问题讨论】:
-
答案已更新以反映版本。特别是在使用真正古老的 PostgreSQL 版本时,例如 8.1(2005 年 11 月发布,2010 年 11 月最终更新),请在所有问题中清楚地提及您的版本。
-
@CraigRinger 我应该使用 select version();在终端中的 Postgres 或 psql --version 中?为什么它们还是不同的?
-
他们肯定是不同的。在大多数系统上,它们会产生相同的结果,但
SELECT version()产生 server 版本,而psql --version打印psql客户端的版本。完全可以使用(比如说)psql 9.2 连接到 PostgreSQL 8.4,因此版本不一定相同。对于大多数问题,它是您关心的服务器版本,这就是首选select version()的原因。一些系统(通常是 Mac OS X)经常在它们上面安装多个 PostgreSQL 版本,所以知道它是服务器版本可能很重要。 -
您应该现在更新到受支持的版本。
-
@a_horse_with_no_name 这只是一个类,所以我想没有人会打扰它。
标签: sql postgresql user-defined-functions