sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL:Hur returnerar man dynamiska rader från tabellen utan att använda kolumndefinitionslistan?

Hanteringen av anyelement som returtyp beskrivs i Polymorfa typer :

Detta argument i ditt fall är relation_name skrivs som anyelement , och genom att skicka NULL::table1 , detta talar verkligen om för planeraren att just detta anrop av function1 bör returnera SETOF table1 . Så långt har det gått bra.

Nu är problemet att när den väl körs returnerar funktionen inte SETOF table1 men något annat. Detta är inte vad exekutorn förväntade sig, därav felet.

Trots att rubriken på frågan är Hur returnerar du dynamiska rader... , det du verkar vilja ha är dynamiska kolumner eller polymorfa resultatuppsättningar.

Och det här är en uppförsbacke med SQL, för för att kunna bygga utförandeplanen för en fråga måste planeraren känna till varje kolumn med dess typ för varje mellanresultat. Om du designar din fråga med en funktion som måste köras för att hitta strukturen för dess produktion, som skapar ett problem med kyckling och ägg:planering måste föregå exekvering, det kan inte bero på det.

Med dess dynamiska typinfererande teknik applicerad på anyelement , PostgreSQL driver redan på kuvertet för att implementera så mycket polymorfism som möjligt med tanke på denna begränsning.



  1. Varför registreras MySQL för JDBC genom att anropa Class.forName(com.mysql.jdbc.Driver)?

  2. Massinlägg av MySQL-relaterade tabeller från bash

  3. SQL för att generera XML av tabelldata

  4. Hur man skapar en tabell i Oracle SQL Developer?