Создать вид с помощью функции postgres - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь построить параметризованное представление, используя функцию postgres:

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

Проблема всегда одна и та же:

SQL Ошибка [42601 ]: ОШИБКА: синтаксическая ошибка в или около "AS"

Есть идеи о том, что я могу делать неправильно?

1 Ответ

2 голосов
/ 17 апреля 2020

Вам необходимо указать столбцы «возвращаемой таблицы», это можно сделать с помощью

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 функций.

...