Discussion:
Diferencia entre RETURNS SETOF y RETURNS TABLE
Lazaro Rubén García Martinez
2012-02-07 16:45:14 UTC
Permalink
Hola a todos en la lista. Les escribo porque tengo un par de dudas respecto a los tipos de retornos en las funciones.


1. Existe alguna diferencia en cuanto a rendimiento entre los tipos de retorno RETURNS SETOF y RETURNS TABLE?


2. Igualmente existe alguna diferencia entre utilizar RETURN QUERY respecto a crear un bucle Loop y dentro de este ejecutar un RETURN NEXT?


Saludos a todos.
Alvaro Herrera
2012-02-07 18:14:06 UTC
Permalink
Post by Lazaro Rubén García Martinez
Hola a todos en la lista. Les escribo porque tengo un par de dudas respecto a los tipos de retornos en las funciones.
1. Existe alguna diferencia en cuanto a rendimiento entre los tipos de retorno RETURNS SETOF y RETURNS TABLE?
2. Igualmente existe alguna diferencia entre utilizar RETURN QUERY respecto a crear un bucle Loop y dentro de este ejecutar un RETURN NEXT?
Me parece que actualmente no hay ninguna diferencia. Sin embargo yo
siempre usaría la forma que sea "más declarativa" porque es posible que
en el futuro se incluyan optimizaciones; aunque nunca he oído decir a
nadie que esté trabajando en optimizaciones en esta área, ni siquiera
que sean posibles.

En estos dos casos que planteas, lo más importante que debes testear es
cómo se comportan si tienes tablas con columnas borradas: es decir,
creas una tabla con una columna extra en la mitad, luego borras la
columna, luego creas la función. Eso debe comportarse igual que si
creas la tabla sin la columna; o bien si creas la función antes de
borrar la columna. Creo que cualquiera de esos que se comporte de modos
raros es un bug a reportar.
--
Álvaro Herrera <alvherre-s8A4EuBfO+***@public.gmane.org>
-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda-RDL/***@public.gmane.org)
Para cambiar tu suscripci�n:
http://www.postgresql.org/mailpref/pgsql-es-ayuda
Lazaro Rubén García Martinez
2012-02-07 18:52:43 UTC
Permalink
Alvaro muchas gracias por tu respuesta.
Saludos.

-----Mensaje original-----
De: Alvaro Herrera [mailto:***@alvh.no-ip.org]
Enviado el: martes, 07 de febrero de 2012 01:44:PM
Para: Lazaro Rubén García Martinez
CC: Ayuda
Asunto: Re: [pgsql-es-ayuda] Diferencia entre RETURNS SETOF y RETURNS TABLE
Post by Lazaro Rubén García Martinez
Hola a todos en la lista. Les escribo porque tengo un par de dudas respecto a los tipos de retornos en las funciones.
1. Existe alguna diferencia en cuanto a rendimiento entre los tipos de retorno RETURNS SETOF y RETURNS TABLE?
2. Igualmente existe alguna diferencia entre utilizar RETURN QUERY respecto a crear un bucle Loop y dentro de este ejecutar un RETURN NEXT?
Me parece que actualmente no hay ninguna diferencia. Sin embargo yo
siempre usaría la forma que sea "más declarativa" porque es posible que
en el futuro se incluyan optimizaciones; aunque nunca he oído decir a
nadie que esté trabajando en optimizaciones en esta área, ni siquiera
que sean posibles.

En estos dos casos que planteas, lo más importante que debes testear es
cómo se comportan si tienes tablas con columnas borradas: es decir,
creas una tabla con una columna extra en la mitad, luego borras la
columna, luego creas la función. Eso debe comportarse igual que si
creas la tabla sin la columna; o bien si creas la función antes de
borrar la columna. Creo que cualquiera de esos que se comporte de modos
raros es un bug a reportar.

--
Álvaro Herrera <***@alvh.no-ip.org>
-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-***@postgresql.org)
Para cambiar tu suscripci�n:
http://www.postgr
Alejandro Carrillo
2012-02-07 18:45:09 UTC
Permalink
Yo devolvería un void en la función y devolvería un cursor dependiendo de los datos. Esto me permitiría manejar diferentes resultados a lo largo de la función y manejar el problema de las columnas borradas.
Más info, ver: http://sourceforge.net/projects/genfuncpostgres/?source=directory
________________________________
Enviado: Martes 7 de febrero de 2012 13:52
Asunto: RE: [pgsql-es-ayuda] Diferencia entre RETURNS SETOF y RETURNS TABLE
Alvaro muchas gracias por tu respuesta.
Saludos.
-----Mensaje original-----
Enviado el: martes, 07 de febrero de 2012 01:44:PM
Para: Lazaro Rub茅n Garc铆a Martinez
CC: Ayuda
Asunto: Re: [pgsql-es-ayuda] Diferencia entre RETURNS SETOF y RETURNS TABLE
Post by Lazaro Rubén García Martinez
Hola a todos en la lista. Les escribo porque tengo un par de dudas respecto a los tipos de retornos en las funciones.
1.      Existe alguna diferencia en cuanto a rendimiento entre los tipos de retorno RETURNS SETOF y RETURNS TABLE?
2.      Igualmente existe alguna diferencia entre utilizar RETURN QUERY respecto a crear un bucle Loop y dentro de este ejecutar un RETURN NEXT?
Me parece que actualmente no hay ninguna diferencia.  Sin embargo yo
siempre usar铆a la forma que sea "m谩s declarativa" porque es posible que
en el futuro se incluyan optimizaciones; aunque nunca he o铆do decir a
nadie que est茅 trabajando en optimizaciones en esta 谩rea, ni siquiera
que sean posibles.
En estos dos casos que planteas, lo mè°©s importante que debes testear es
c莞mo se comportan si tienes tablas con columnas borradas: es decir,
creas una tabla con una columna extra en la mitad, luego borras la
columna, luego creas la funci莞n.  Eso debe comportarse igual que si
creas la tabla sin la columna; o bien si creas la funci莞n antes de
borrar la columna.  Creo que cualquiera de esos que se comporte de modos
raros es un bug a reportar.
--
-
http://www.postgresql.org/mailpref/pgsql-es-ayuda
Lazaro Rubén García Martinez
2012-02-07 19:18:37 UTC
Permalink
Lo del cursor definitivamente es una buena opción, solo que existen algunos procedimientos almacenados que necesito desarrollarlos utilizando como valor de retorno un SETOF de tablas o tipos de datos compuestos.

Saludos.

De: Alejandro Carrillo [mailto:***@yahoo.es]
Enviado el: martes, 07 de febrero de 2012 02:15:PM
Para: Lazaro Rubén García Martinez
CC: pgsql-es-***@postgresql.org
Asunto: Re: [pgsql-es-ayuda] Diferencia entre RETURNS SETOF y RETURNS TABLE

Yo devolvería un void en la función y devolvería un cursor dependiendo de los datos. Esto me permitiría manejar diferentes resultados a lo largo de la función y manejar el problema de las columnas borradas.
Más info, ver: http://sourceforge.net/projects/genfuncpostgres/?source=directory

________________________________
De: Lazaro Rubén García Martinez <***@vnz.uci.cu>
Para: Alvaro Herrera <***@alvh.no-ip.org>
CC: Ayuda <pgsql-es-***@postgresql.org>
Enviado: Martes 7 de febrero de 2012 13:52
Asunto: RE: [pgsql-es-ayuda] Diferencia entre RETURNS SETOF y RETURNS TABLE

Alvaro muchas gracias por tu respuesta.
Saludos.

-----Mensaje original-----
De: Alvaro Herrera [mailto:***@alvh.no-ip.org<mailto:***@alvh.no-ip.org>]
Enviado el: martes, 07 de febrero de 2012 01:44:PM
Para: Lazaro Rub茅n Garc铆a Martinez
CC: Ayuda
Asunto: Re: [pgsql-es-ayuda] Diferencia entre RETURNS SETOF y RETURNS TABLE
Post by Lazaro Rubén García Martinez
Hola a todos en la lista. Les escribo porque tengo un par de dudas respecto a los tipos de retornos en las funciones.
1. Existe alguna diferencia en cuanto a rendimiento entre los tipos de retorno RETURNS SETOF y RETURNS TABLE?
2. Igualmente existe alguna diferencia entre utilizar RETURN QUERY respecto a crear un bucle Loop y dentro de este ejecutar un RETURN NEXT?
Me parece que actualmente no hay ninguna diferencia. Sin embargo yo
siempre usar铆a la forma que sea "m谩s declarativa" porque es posible que
en el futuro se incluyan optimizaciones; aunque nunca he o铆do decir a
nadie que est茅 trabajando en optimizaciones en esta 谩rea, ni siquiera
que sean posibles.

En estos dos casos que planteas, lo mè°©s importante que debes testear es
c莞mo se comportan si tienes tablas con columnas borradas: es decir,
creas una tabla con una columna extra en la mitad, luego borras la
columna, luego creas la funci莞n. Eso debe comportarse igual que si
creas la tabla sin la columna; o bien si creas la funci莞n antes de
borrar la columna. Creo que cualquiera de esos que se comporte de modos
raros es un bug a reportar.
--
脕lvaro Herrera <***@alvh.no-ip.org<mailto:***@alvh.no-ip.org>>
-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-***@postgresql.org<mailto:pgsql-es-***@postgresql.org>)
Para cambiar tu suscripci髇:
http://www.postgresql.org/mailpref/pgsql-es-ayuda
Loading...