Obsluha anyelement
jako návratový typ je popsán v Polymorfní typy
:
Tento argument je ve vašem případě relation_name
zadaný jako anyelement
a předáním NULL::table1
, to skutečně říká plánovači, že toto konkrétní volání function1
by měl vrátit SETOF table1
. Zatím je to dobré.
Nyní je problém v tom, že po spuštění funkce nevrací SETOF table1
ale něco jiného. Toto exekutor neočekával, proto došlo k chybě.
Přestože název otázky je Jak vrátit dynamické řádky... , zdá se, že chcete dynamické sloupce nebo polymorfní sady výsledků.
A to je náročný boj s SQL, protože k sestavení plánu provádění dotazu musí plánovač znát každý sloupec s jeho typem pro každý mezivýsledek. Pokud navrhnete svůj dotaz s funkcí, která musí být provedena, aby byla nalezena struktura jeho výstupu, vznikne problém slepice a vejce:plánování musí předcházet provedení, nemůže na něm záviset.
S jeho technikou dynamického odvozování typu aplikovanou na anyelement
, PostgreSQL se již snaží implementovat co nejvíce polymorfismu vzhledem k tomuto omezení.