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í.