Postgres объединяет два поля в одно со значениями UnknownType

Я использую клиент sqirrel sql для работы с Postgres, и проблема в том, что один и тот же запрос возвращает разные результаты.

Если приведенный ниже запрос выполняется как есть, он работает нормально:

select foo.column1 as Field1, 1 as Field2 from (values (3343),(45323)) as Foo

Но если запрос выполняется из сохраненной функции, подобной этой:

CREATE OR REPLACE FUNCTION getSomeData(text) RETURNS setof tmp_stub_type AS
$body$
DECLARE
 r tmp_stub_type%rowtype;
BEGIN
    FOR r IN
      select foo.column1 as Field1, 1 as Field2 from (values (3343),(45323)) as Foo
    LOOP
      RETURN NEXT r;
    END LOOP;
    RETURN;
END;
$body$
LANGUAGE 'plpgsql';

Он возвращает то же количество строк, но с значениями UnknownType с одним полем вместо двух.

tmp_stub_type — это обычная таблица с двумя целочисленными полями и ничего более.

Я пытался решить это с помощью PgAdmin Postgres, но он показал мне то же самое, кроме значений - они были правильными, но помещены в одно поле и разделены запятой.

Мне нужно запустить запрос внутри хранимой функции, пожалуйста, помогите разобраться с этим и извините за мой английский.

я использую: Postgres 9.3, Squirrel 3.5.3, ОС Windows


person drewango    schedule 08.08.2014    source источник


Ответы (1)


Чтобы получить несколько столбцов из функции, которая возвращает тип строки или имеет несколько выходных параметров, используйте, например. SELECT * FROM getSomeData(...) вместо SELECT getSomeData(...).

Источник: http://www.postgresql.org/docs/9.3/static/plpgsql-control-structures.html#AEN58217

person tsnorri    schedule 08.08.2014
comment
Это работает. Я очень ценю вашу помощь! Благодарю вас! - person drewango; 09.08.2014