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

PostgreSQL:come restituire righe dinamiche dalla tabella senza utilizzare l'elenco di definizione delle colonne?

La gestione di anyelement poiché un tipo restituito è descritto in Tipi polimorfici :

Questo argomento nel tuo caso è relation_name digitato come anyelement e passando NULL::table1 , questo in effetti dice al pianificatore che questa particolare chiamata di function1 dovrebbe restituire SETOF table1 . Fin qui tutto bene.

Ora il problema è che una volta eseguita, la funzione non restituisce SETOF table1 ma qualcos'altro. Questo non è ciò che l'esecutore si aspettava, da qui l'errore.

Nonostante il titolo della domanda sia Come restituire le righe dinamiche... , quello che sembra volere sono colonne dinamiche o set di risultati polimorfici.

E questa è una battaglia in salita con SQL, perché per costruire il piano di esecuzione di una query, il pianificatore deve conoscere ogni colonna con il suo tipo per ogni risultato intermedio. Se progetti la tua query con una funzione che deve essere eseguita per trovare la struttura del suo output, questo crea un problema di pollo e uova:la pianificazione deve precedere l'esecuzione, non può dipendere da essa.

Con la sua tecnica di inferenza dinamica del tipo applicata a anyelement , PostgreSQL sta già spingendo la busta per implementare quanto più polimorfismo possibile dato questo vincolo.