2016-06-20 6 views
0

クエリの結果を関数に渡していますが、この関数はSETOFまたはTABLE(両方とも試したもの)を返します。最終的な結果は匿名のレコードなので、関数の型に戻すことはできません。 (または任意の特定のタイプ)。私は匿名レコードの複数の行を取得します(正しい情報を保持します)。クエリー結果(ポストグル)の関数を呼び出すときに型にキャスト戻る

CREATE TYPE some_type AS (
    foo_id BIGINT, 
    row_date DATE 
); 
CREATE TABLE foo 
(
    foo_id BIGINT, 
    foo_range DATERANGE NOT NULL 
); 
CREATE OR REPLACE function prep (in_foo_id BIGINT 
            in_foo_range) 
    RETURNS SETOF some_type AS $$ 
    SELECT in_foo_id as foo_id, 
     generate_series(lower(in_foo_range), upper(in_foo_range)-1, interval '1d')::date as row_date 
$$ LANGUAGE sql IMMUTABLE; 

select prep(a.foo_id,a.foo_range) from (select * from foo limit 2) a 

答えて

1

あなたが実際にそれを求めているため、あなたは記録を取得しています。あなたは、レコード内のフィールドをしたい、それを教える:

select (prep(a.foo_id,a.foo_range)).* 
from (select * from foo limit 2) a; 

またはより良い横で参加:

select p.* 
from 
    (select * from foo limit 2) a, 
    prep(a.foo_id,a.foo_range) p; 
関連する問題