sql >> Database teknologi >  >> RDS >> PostgreSQL

PostgreSQL:Hvordan returnerer man dynamiske rækker fra tabel uden at bruge kolonnedefinitionsliste?

Håndteringen af ​​anyelement som returtype er beskrevet i Polymorfe typer :

Dette argument i dit tilfælde er relation_name indtastet som anyelement , og ved at sende NULL::table1 , dette fortæller faktisk planlæggeren, at dette særlige kald af function1 skal returnere SETOF table1 . Så langt så godt.

Nu er problemet, at når den først er udført, returnerer funktionen ikke SETOF table1 men noget andet. Dette er ikke, hvad bobestyreren forventede, derfor fejlen.

På trods af at titlen på spørgsmålet er Hvordan returneres dynamiske rækker... , hvad du ser ud til at ønske dig, er dynamiske kolonner eller polymorfe resultatsæt.

Og dette er en kamp op ad bakke med SQL, for for at opbygge udførelsesplanen for en forespørgsel, skal planlæggeren kende hver kolonne med dens type for hvert mellemresultat. Hvis du designer din forespørgsel med en funktion, der skal udføres for at finde strukturen af ​​dens output, hvilket skaber et hønse- og ægproblem:planlægning skal gå forud for udførelse, den kan ikke afhænge af det.

Med sin dynamiske type-infererende teknik anvendt på anyelement , PostgreSQL skubber allerede til envelope for at implementere så meget polymorfi som muligt givet denne begrænsning.



  1. Jeg vil lave INSERT uden registrering i DB

  2. Kunne ikke initialisere punktsky - ORA-13249:Fejl ved oprettelse af dml-trigger

  3. Håndtering af replikeringsproblemer fra ikke-GTID til GTID MariaDB-databaseklynger

  4. Indsæt i en tabel efter at have fået et ID fra et andet bord