Наименование столбцов в функциях Postgresql - PullRequest
2 голосов
/ 14 мая 2011

Я хочу создать функцию PSQL, которая возвращает результат в виде таблицы.Мое определение функции выглядит следующим образом:

create or replace function myfunc1() 
   returns table(id varchar(50), title varchar(50)) 
as $$ 
begin 
   return query select id, title from books; 
end; 
$$ language plpgsql;

Но когда я вызываю функцию, я получаю эту ошибку:

ОШИБКА: ссылка на столбец "id" является неоднозначной.select id, title from books ^ ДЕТАЛИ: Это может относиться либо к переменной PL / pgSQL, либо к столбцу таблицы.

Очевидно, это потому, что я использую имя столбца id в обоих возвращаемыхстол и моя таблица целей.Простейшим решением будет изменение имен столбцов.Но я здесь, чтобы искать способ, который позволил бы мне использовать имя столбца, который я хочу.Кроме того, изменение имени сделало бы мой код странным и трудным для понимания другими.

Ответы [ 3 ]

3 голосов
/ 14 мая 2011

Удалите двусмысленность, указав имена столбцов:

create or replace function myfunc1()
  returns table(id varchar(50), title varchar(50)) as
$$
  select books.id, books.title from books;
$$ language sql stable;
1 голос
/ 14 мая 2011

SELECT books.id, title FROM books * * 1002

0 голосов
/ 14 мая 2011

То, что ... returns table(id varchar(50), title varchar(50)) ... часть определения функции является просто другим способом определения параметров OUT .Теперь у вас есть два параметра OUT с именами id и title и два столбца (из таблицы book), на которые вы ссылаетесь с именем ... да, вы уже догадались - id и title.

Чтобы избежать этой неоднозначности, переименуйте имена столбцов возвращаемой таблицы в определении вашей функции:

CREATE OR REPLACE FUNCTION myfunc1() RETURNS TABLE(p_id VARCHAR(50), p_title VARCHAR(50)) AS $_$
BEGIN
  RETURN QUERY SELECT id, title FROM books;
END;
$_$ LANGUAGE plpgsql;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...