anyelement
の処理 リターンタイプは
あなたの場合のこの引数はrelation_name
です anyelement
と入力しました 、およびNULL::table1
を渡すことによって 、これは確かにプランナーにfunction1
のこの特定の呼び出しを伝えます SETOF table1
を返す必要があります 。これまでのところ良いです。
ここで問題となるのは、一度実行すると、関数がSETOF table1
を返さないことです。 しかし、何か他のもの。これはエグゼキュータが期待していたものではないため、エラーになります。
質問のタイトルが動的行を返す方法...であるにもかかわらず、 、必要と思われるのは、動的列または多態的な結果セットです。
また、これはSQLとの困難な戦いです。クエリの実行プランを作成するために、プランナーは各中間結果のタイプとともに各列を知る必要があるためです。出力の構造を見つけるために実行する必要のある関数を使用してクエリを設計すると、鶏が先か卵が先かという問題が発生します。計画は実行の前に行う必要があり、それに依存することはできません。
anyelement
に適用される動的な型侵害技術 、PostgreSQLは、この制約を考慮して、可能な限り多くのポリモーフィズムを実装するために、すでに限界を押し広げています。