sql >> Base de Datos >  >> RDS >> PostgreSQL

PostgreSQL:¿Cómo devolver filas dinámicas de la tabla sin usar la lista de definición de columna?

El manejo de anyelement como tipo de retorno se describe en Tipos polimórficos :

Este argumento en su caso es relation_name escrito como anyelement y pasando NULL::table1 , esto de hecho le dice al planificador que esta llamada particular de function1 debe devolver SETOF table1 . Hasta ahora todo bien.

Ahora el problema es que una vez que se ejecuta, la función no devuelve SETOF table1 pero algo mas Esto no es lo que esperaba el ejecutor, de ahí el error.

A pesar de que el título de la pregunta es Cómo devolver filas dinámicas... , lo que parece querer son columnas dinámicas o conjuntos de resultados polimórficos.

Y esta es una batalla cuesta arriba con SQL, porque para construir el plan de ejecución de una consulta, el planificador tiene que conocer cada columna con su tipo para cada resultado intermedio. Si diseña su consulta con una función que debe ejecutarse para encontrar la estructura de su salida, eso crea un problema del huevo y la gallina:la planificación debe preceder a la ejecución, no puede depender de ella.

Con su técnica dinámica de inferencia de tipos aplicada a anyelement , PostgreSQL ya está empujando el sobre para implementar tanto polimorfismo como sea posible dada esta restricción.