SELECT を動的に生成しました。結果を SETOF RECORD として返すようにしています。そのようなもの:
CREATE FUNCTION test(column_name text) RETURNS SETOF RECORD AS $$
DECLARE
row RECORD;
BEGIN
FOR row IN EXECUTE 'SELECT ' || quote_ident(column_name) || ' FROM dates'
LOOP
RETURN NEXT row;
END LOOP;
RETURN;
END;
$$ LANGUAGE 'plpgsql';
私がしようとすると:
SELECT * FROM test('column1');
私はこれを得る:
ERROR: a column definition list is required for functions returning "record"
column1 が整数型であることはわかっています。
SELECT * FROM test('column1') f(a int);
これは整数型になることがわかっているため、結果は正しいです。
私がしようとすると:
SELECT * FROM test('column1') f(a varchar);
エラーが発生します:
ERROR: wrong record type supplied in RETURN NEXT
DETAIL: Returned type integer does not match expected type character varying in column 1.
ここで私の質問: タイプ 'f(a int)' を定義するクエリの一部を取り除くにはどうすればよいですか。Postgresは返される型を知っているので、それは実現可能です。IMMUTABLE オプションを試してみましたが、うまくいきませんでした。