首页 > 解决方案 > 使用 postgres 函数创建视图

问题描述

我正在尝试使用 postgres 函数构建参数化视图:

CREATE FUNCTION schemaB.testFunc(p INT)
RETURNS TABLE 
AS
RETURN (SELECT * FROM schemaZ.mainTable WHERE id=p)

问题总是一样的:

SQL 错误 [42601]:错误:“AS”处或附近的语法错误

知道我做错了什么吗?

标签: postgresqlstored-functions

解决方案


您需要指定“返回表”的列,这可以使用

returns table(col_1 integer, col_2 text, ...)

在您的情况下,您只返回一个表的行,因此更易于使用

returns setof maintable

如手册中所述,函数体需要用单引号括起来,或者使用美元引号

由于 Postgres 中存储的函数可以用多种不同的语言编写,因此您还需要指定一种语言 - 在这种情况下language sql是合适的。

因此,将所有这些放在一起,您需要:

CREATE FUNCTION schemaB.testFunc(p_id INT)
  RETURNS setof  schemaZ.mainTable
AS
$$
 SELECT * 
 FROM schemaZ.mainTable 
 WHERE id = p_id
$$
language sql;

函数不需要return声明language sql


推荐阅读