Discussion:
diferencia entre funciones
Arturo Munive
2007-06-25 23:38:54 UTC
Permalink
Disculpen la "ingenuidad" de mi pregunta, pero ahi va

¿Hay alguna diferencia en cuanto a rendimiento o algun otro factor al
escribir funciones SQL contra escribir funciones en PL/pgSQL?

es decir hay alguna razón para preferir un tipo de funciones sobre otro?
cuando debo escribir una funcion en SQL y cuando en PL/pgSQL?



Se que los mas experimentados esbozaran una sonrisa, pero espero que la
sonrisa sea seguida por una respuesta :D

Gracias
Jaime Casanova
2007-06-26 00:16:42 UTC
Permalink
Post by Arturo Munive
Disculpen la "ingenuidad" de mi pregunta, pero ahi va
¿Hay alguna diferencia en cuanto a rendimiento o algun otro factor al
escribir funciones SQL contra escribir funciones en PL/pgSQL?
es decir hay alguna razón para preferir un tipo de funciones sobre otro?
leyendo http://www.postgresql.org/docs/8.2/static/xplang.html, se me
ocurre que la respuesta seria porque los lenguajes procedurales
necesitaran una etapa adicional de parse/analysis y determinar que
debe ser enviado al servidor como SQL para que sea ejecutado y que se
queda para ser ejecutado por el handler (manejador del lenguaje)
Post by Arturo Munive
cuando debo escribir una funcion en SQL y cuando en PL/pgSQL?
cuando necesites hacer algo que vaya mas alla de las capacidades de SQL
--
Atentamente,
Jaime Casanova

"Programming today is a race between software engineers striving to
build bigger and better idiot-proof programs and the universe trying
to produce bigger and better idiots.
So far, the universe is winning."
Richard Cook
Arturo Munive
2007-06-26 13:40:50 UTC
Permalink
Post by Jaime Casanova
Post by Arturo Munive
Disculpen la "ingenuidad" de mi pregunta, pero ahi va
¿Hay alguna diferencia en cuanto a rendimiento o algun otro factor al
escribir funciones SQL contra escribir funciones en PL/pgSQL?
es decir hay alguna razón para preferir un tipo de funciones sobre otro?
leyendo http://www.postgresql.org/docs/8.2/static/xplang.html, se me
ocurre que la respuesta seria porque los lenguajes procedurales
necesitaran una etapa adicional de parse/analysis y determinar que
debe ser enviado al servidor como SQL para que sea ejecutado y que se
queda para ser ejecutado por el handler (manejador del lenguaje)
Post by Arturo Munive
cuando debo escribir una funcion en SQL y cuando en PL/pgSQL?
cuando necesites hacer algo que vaya mas alla de las capacidades de SQL
mmm entonces las funciones los lenguajes procedurales logran cosas mas
complejas que el propio sql

osea que escribir

CREATE FUNCTION una_funcion (param varchar) RETURNS SETOF varchar AS
$body$
SELECT
t1.campo1 as c1,
t2.campo1 as c2
FROM
tabla1 as t1,
tabla2 as t2
WHERE
t2.otro_campo = p
AND t1.campo3 = t2.campo3
$body$
LANGUAGE 'sql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

es lo mismo que escribir un vista con la misma estructura

Create View vista as

SELECT
t1.campo1 as c1,
t2.campo1 as c2,
t2.otro_campo as c3
FROM
tabla1 as t1,
tabla2 as t2
WHERE
t1.campo3 = t2.campo3


y luego hacer un select * from vista where c3 = p

Digo lo mismo por que el hecho de escribir esa consulta en una función
no me otorga mas eficiencia ni otra característica diferente

Es así, o entendí mal?
Alvaro Herrera
2007-06-26 14:12:26 UTC
Permalink
Post by Arturo Munive
Digo lo mismo por que el hecho de escribir esa consulta en una función
no me otorga mas eficiencia ni otra característica diferente
Es así, o entendí mal?
Es asi.
--
Alvaro Herrera http://www.PlanetPostgreSQL.org/
"I'm always right, but sometimes I'm more right than other times."
(Linus Torvalds)
Arturo Munive
2007-06-26 13:49:44 UTC
Permalink
Post by Jaime Casanova
Post by Arturo Munive
Disculpen la "ingenuidad" de mi pregunta, pero ahi va
¿Hay alguna diferencia en cuanto a rendimiento o algun otro factor al
escribir funciones SQL contra escribir funciones en PL/pgSQL?
es decir hay alguna razón para preferir un tipo de funciones sobre otro?
leyendo http://www.postgresql.org/docs/8.2/static/xplang.html, se me
ocurre que la respuesta seria porque los lenguajes procedurales
necesitaran una etapa adicional de parse/analysis y determinar que
debe ser enviado al servidor como SQL para que sea ejecutado y que se
queda para ser ejecutado por el handler (manejador del lenguaje)
Post by Arturo Munive
cuando debo escribir una funcion en SQL y cuando en PL/pgSQL?
cuando necesites hacer algo que vaya mas alla de las capacidades de SQL
veo en el link que me enviaste que dice:
"... the database server has no built-in knowledge about how to
interpret the function's source text."

entonces asumo que las funciones en SQL son interpretadas como un
conjunto de sentencias, es decir no se compilan, si no solo se
interpretan como un conjunto de sentencias que podrían haber sido
tipeadas dirrectamente por psql... no?
Alvaro Herrera
2007-06-26 14:12:08 UTC
Permalink
Post by Arturo Munive
"... the database server has no built-in knowledge about how to
interpret the function's source text."
entonces asumo que las funciones en SQL son interpretadas como un
conjunto de sentencias, es decir no se compilan, si no solo se
interpretan como un conjunto de sentencias que podrían haber sido
tipeadas dirrectamente por psql... no?
Las funciones SQL pueden ser interpretadas (a diferencia del resto), y
expandidas "en linea" como si fuera una vista. Pero ojo, esto se hace
solo en los casos mas triviales.
--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support
Arturo Munive
2007-06-26 14:24:11 UTC
Permalink
Post by Alvaro Herrera
Post by Arturo Munive
"... the database server has no built-in knowledge about how to
interpret the function's source text."
entonces asumo que las funciones en SQL son interpretadas como un
conjunto de sentencias, es decir no se compilan, si no solo se
interpretan como un conjunto de sentencias que podrían haber sido
tipeadas dirrectamente por psql... no?
Las funciones SQL pueden ser interpretadas (a diferencia del resto), y
expandidas "en linea" como si fuera una vista. Pero ojo, esto se hace
solo en los casos mas triviales.
Ok gracias por aclararme

Loading...