sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL:hoe dynamische rijen uit een tabel retourneren zonder de lijst met kolomdefinities te gebruiken?

De afhandeling van anyelement als een retourtype wordt beschreven in Polymorfe typen :

Dit argument is in jouw geval relation_name getypt als anyelement , en door NULL::table1 . door te geven , dit vertelt de planner inderdaad dat deze specifieke aanroep van function1 zou SETOF table1 moeten teruggeven . Tot zover goed.

Het probleem is nu dat de functie, eenmaal uitgevoerd, SETOF table1 niet teruggeeft maar iets anders. Dit is niet wat de uitvoerder verwachtte, vandaar de fout.

Ondanks dat de titel van de vraag Hoe dynamische rijen te retourneren... . is , wat u lijkt te willen zijn dynamische kolommen of polymorfe resultatensets.

En dit is een zware strijd met SQL, want om het uitvoeringsplan van een query te bouwen, moet de planner elke kolom met zijn type kennen voor elk tussenresultaat. Als u uw query ontwerpt met een functie die moet worden uitgevoerd om de structuur van de uitvoer te vinden, ontstaat er een kip-en-ei-probleem:planning moet voorafgaan aan uitvoering, het kan er niet van afhangen.

Met zijn dynamische type-afleidende techniek toegepast op anyelement , PostgreSQL is al druk bezig met het implementeren van zoveel mogelijk polymorfisme gezien deze beperking.



  1. Een tekenreeks naar datum converteren en een uitzondering maken wanneer de opgegeven tekenreeks ongeldig is

  2. Bulk_update_mappings gebruiken in SQLAlchemy om meerdere rijen met verschillende waarden bij te werken

  3. Waarom keert pg_restore met succes terug, maar herstelt mijn database niet echt?

  4. JDBC installeren voor Jboss EAP 6.3