sql >> Databáze >  >> RDS >> PostgreSQL

PostgreSQL:Jak vrátit dynamické řádky z tabulky bez použití seznamu definic sloupců?

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



  1. MySQL, zřetězit dva sloupce

  2. AWS Aurora MySQL bez serveru:jak se připojit z MySQL Workbench

  3. Extrahování pouze data z pole datetime (mysql) a jeho přiřazení k proměnné php

  4. Postgre SQL ignoruje podmínku filtrování, pokud je hodnota null