2015-01-14 4 views
1

я создаю функцию в инструменте запроса PgAdmin, который возвращает таблицу с одним столбцом:Postgres функция теряет имена столбцов

create or replace function test_function() 
    returns table(a integer) as 
... 

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

create or replace function test_function() 
    returns setof integer as 
... 

Это, похоже, происходит только при возврате одной колонки. Это вызывает у меня проблемы, потому что, если я хочу, чтобы создать такое заявление:

select t.a from test_function(); 

Я не могу, имя столбца принимает на странное название, и я получаю сообщение об ошибке, что тип возвращаемого значения не имеет столбец с. Как заставить это вернуть таблицу?

+1

Странно, это может быть некоторая ошибка pgAdmin ... для обходного пути вы можете указать имена выходных столбцов с параметрами (именами) с именем 'OUT' http://sqlfiddle.com/#!15/82074/4 – pozs

+0

@ pozs благодарит, что делает трюк. Я нашел отчет об ошибке здесь http://www.postgresql.org/message-id/[email protected] , но это было давно, и обновление до последней версии не помогает. – Mike

+0

Вызывает ли 'pg_get_function_def()' неверная информация? –

ответ

1

Это ошибка в pgAdmin (сообщено here).

Определение функции хранится правильно при первом ее создании. pgAdmin отображает его неправильно, но вызовы функции должны по-прежнему вести себя так, как ожидалось.

Проблема возникает только при выполнении инструкции pgAdmin CREATE OR REPLACE и ее запуска. Отдых будет успешным, но функция будет терпеть неудачу во время выполнения из-за отсутствия объявления переменной.

До тех пор, пока вы не забыли исправить возвращаемый тип каждый раз, когда вы воссоздаете функцию, у вас не должно возникнуть проблемы.

Смежные вопросы