Postgresql 使用postgres函数创建视图

Postgresql 使用postgres函数创建视图,postgresql,stored-functions,Postgresql,Stored Functions,我正在尝试使用postgres函数构建参数化视图: CREATE FUNCTION schemaB.testFunc(p INT) RETURNS TABLE AS RETURN (SELECT * FROM schemaZ.mainTable WHERE id=p) 问题总是一样的: SQL错误[42601]:错误:位于或接近“AS”的语法错误 知道我可能做错了什么吗?您需要指定“返回表”的列,这可以使用 returns table(col_1 integer, col_2 text, .

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

CREATE FUNCTION schemaB.testFunc(p INT)
RETURNS TABLE 
AS
RETURN (SELECT * FROM schemaZ.mainTable WHERE id=p)
问题总是一样的:

SQL错误[42601]:错误:位于或接近“AS”的语法错误


知道我可能做错了什么吗?

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

returns table(col_1 integer, col_2 text, ...)
在本例中,只返回一个表的行,因此使用起来更方便

returns setof maintable
函数体需要用单引号括起来,或者使用

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

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

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

language sql
函数不需要
return
语句。

您需要指定“return table”的列,这可以使用

returns table(col_1 integer, col_2 text, ...)
在本例中,只返回一个表的行,因此使用起来更方便

returns setof maintable
函数体需要用单引号括起来,或者使用

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

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

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

language sql
函数不需要
return
语句。

是否可以基于p\u id参数从不同的表中返回2个或更多选择?例如:如果p_id=1返回从schemaZ.mainTable选择,如果p_id=2则返回从schemaZ.tableSecondary1选择,等等?是否可以基于p_id参数从不同的表返回2个或更多选择?例如:如果p_id=1返回select from schemaZ.main表,如果p_id=2则返回select from schemaZ.tableSecondary1,等等?