これは、RECORDが関数を返す場合に可能です。
CREATE FUNCTION calculation(how_many integer) RETURNS SETOF RECORD
LANGUAGE plpgsql
AS $fff$
BEGIN
IF how_many = 1
THEN RETURN QUERY SELECT 'foo'::text;
ELSIF how_many = 2
THEN RETURN QUERY SELECT 'foo'::text, 'bar'::text;
END IF;
END;
$fff$
;
そして今、あなたはできる:
jbet=> SELECT * FROM calculation(1) AS f(first_col text);
first_col
-----------
foo
(1 row)
jbet=> SELECT * FROM calculation(2) AS f(first_col text, second_col text);
first_col | second_col
-----------+------------
foo | bar
(1 row)
非常に深刻 欠点は、関数を呼び出すたびに、返される列のセットを定義する必要があることです。そのため、この回答が役に立たないと思います:)
とにかく、Postgresqlは前に各SELECTの返されたタイプを知る必要があります クエリを実行するため、いずれかの方法で列を定義する必要があります。
データが必要で、個別の列があるかどうかを気にしない場合は、JSONの戻り値が妥当な答えになる可能性があります。