使用 postgres 函数创建视图
Create view using postgres function
我正在尝试使用 postgres 函数构建参数化视图:
CREATE FUNCTION schemaB.testFunc(p INT)
RETURNS TABLE
AS
RETURN (SELECT * FROM schemaZ.mainTable WHERE id=p)
问题总是一样的:
SQL Error [42601]: ERROR: syntax error at or near "AS"
知道我做错了什么吗?
您需要指定 "return table" 的列,这可以使用
returns table(col_1 integer, col_2 text, ...)
在您的情况下,您只返回一行 table,因此使用起来更容易
returns setof maintable
As documented in the manual the function body needs to be enclosed in single quotes, or using dollar quoting。
由于存储函数可以在 Postgres 中用多种不同的语言编写,您还需要指定一种语言 - 在本例中 language sql
是 suitable。
因此,将所有这些放在一起,您需要:
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
语句。
我正在尝试使用 postgres 函数构建参数化视图:
CREATE FUNCTION schemaB.testFunc(p INT)
RETURNS TABLE
AS
RETURN (SELECT * FROM schemaZ.mainTable WHERE id=p)
问题总是一样的:
SQL Error [42601]: ERROR: syntax error at or near "AS"
知道我做错了什么吗?
您需要指定 "return table" 的列,这可以使用
returns table(col_1 integer, col_2 text, ...)
在您的情况下,您只返回一行 table,因此使用起来更容易
returns setof maintable
As documented in the manual the function body needs to be enclosed in single quotes, or using dollar quoting。
由于存储函数可以在 Postgres 中用多种不同的语言编写,您还需要指定一种语言 - 在本例中 language sql
是 suitable。
因此,将所有这些放在一起,您需要:
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
语句。