From: | Lazáro Rubén García Martínez <lgarciam(at)vnz(dot)uci(dot)cu> |
---|---|
To: | Fede Martinez <federicoemartinez(at)gmail(dot)com> |
Cc: | "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | RE: Diferencias entre IMMUTABLE y STABLE |
Date: | 2012-07-25 16:24:35 |
Message-ID: | 294D3D02D5E18D42827B2ECFEADEB6884E10643B40@mx-interno.vnz.uci.cu |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Fede tienes toda la razón la diferencia fue que ejecuté lo que enviaste sin el BEGIN. Como funciona correctamente es si la función es STABLE, para INMUTABLE da valor erróneo.
saludos y muchas gracias por tu ayuda.
________________________________________
From: Fede Martinez [federicoemartinez(at)gmail(dot)com]
Sent: Wednesday, July 25, 2012 11:15 AM
To: Lazáro Rubén García Martínez
Subject: Re: [pgsql-es-ayuda] Diferencias entre IMMUTABLE y STABLE
pegaste lo que pase y te da 1 y 2? tal vez sea un tema de versión, yo estoy usando la 8.4.11 y corrí el ejemplo y me da 1 en ambos casos. Igualmente aunque ese ejemplo no funcione, no quiere decir que no vayas a tener problemas. Mi consejo es que si vas a mirar alguna tabla uses STABLE e IMMUTABLE solo uses para funciones que dependen solo de sus parámetros.
Saludos
El 25 de julio de 2012 12:54, Lazáro Rubén García Martínez <lgarciam(at)vnz(dot)uci(dot)cu<mailto:lgarciam(at)vnz(dot)uci(dot)cu>> escribió:
Fede muchas gracias por tu respuesta, pero prové lo que me enviaste y funciona como espero, no como usted me dice.
Estaré haciendo algo mal?
Saludos.
________________________________________
From: Fede Martinez [federicoemartinez(at)gmail(dot)com<mailto:federicoemartinez(at)gmail(dot)com>]
Sent: Wednesday, July 25, 2012 10:34 AM
To: Lazáro Rubén García Martínez
Subject: Re: [pgsql-es-ayuda] Diferencias entre IMMUTABLE y STABLE
El tema es que postgres te lo permite, pero el planificador podria hacer alguna optimización y que no te funcione como esperas. Por ejemplo si guardas un plan preparado podes tener problemas.
Considera este ejemplo:
begin;
create table ejemplo(a integer);
create or replace function ejemplo1()
returns integer as $$
declare
v_res integer;
begin
SELECT a into v_res from ejemplo order by a desc limit 1;
return v_res;
end;
$$ language plpgsql IMMUTABLE;
create or replace function ejemplo2()
returns integer as $$
begin
return ejemplo1();
end;
$$ language plpgsql IMMUTABLE;
insert into ejemplo(a) values (1);
select ejemplo2();
-- Devuelve 1
insert into ejemplo(a) values (2);
select ejemplo2();
-- Devuelve 1
Si pusiera STABLE devolveria 1 primero y 2 despues.
El 25 de julio de 2012 11:23, Lazáro Rubén García Martínez <lgarciam(at)vnz(dot)uci(dot)cu<mailto:lgarciam(at)vnz(dot)uci(dot)cu><mailto:lgarciam(at)vnz(dot)uci(dot)cu<mailto:lgarciam(at)vnz(dot)uci(dot)cu>>> escribió:
Si las funciones immutables dependen solo de sus argumentos y no de datos que están en la base de datos, entonces porque razón yo puedo dentro del cuerpo de una función inmutable, recorrer una tabla y retornar este resultado??
Saludos.
________________________________________
From: Fede Martinez [federicoemartinez(at)gmail(dot)com<mailto:federicoemartinez(at)gmail(dot)com><mailto:federicoemartinez(at)gmail(dot)com<mailto:federicoemartinez(at)gmail(dot)com>>]
Sent: Wednesday, July 25, 2012 9:20 AM
To: Lazáro Rubén García Martínez
Subject: Re: [pgsql-es-ayuda] Diferencias entre IMMUTABLE y STABLE
El 24 de julio de 2012 23:47, Lazáro Rubén García Martínez <lgarciam(at)vnz(dot)uci(dot)cu<mailto:lgarciam(at)vnz(dot)uci(dot)cu><mailto:lgarciam(at)vnz(dot)uci(dot)cu<mailto:lgarciam(at)vnz(dot)uci(dot)cu>><mailto:lgarciam(at)vnz(dot)uci(dot)cu<mailto:lgarciam(at)vnz(dot)uci(dot)cu><mailto:lgarciam(at)vnz(dot)uci(dot)cu<mailto:lgarciam(at)vnz(dot)uci(dot)cu>>>> escribió:
Hola a todos en la lista, les escribo porque no comprendo bien la diferencia entre las funciones IMMUTABLE y STABLE.
Leyendo en la web de Rafael encontré estas definiciones:
IMMUTABLE: Indica que la función no puede alterar a la base de datos y que siempre devolverá el mismo resultado, dados los mismos valores como argumentos. Este tipo de funciones no pueden realizar consultas en la base de datos.
Sobre esta definición, a que se refiere con que este tipo de funciones no pueden realizar consultas a la base de datos?
Las funciones immutables dependen solo de sus argumentos y no de datos que están en la base de datos.
STABLE: Indica que la función no puede alterar a la base de datos y que siempre devolverá el mismo resultado en una consulta individual de una tabla, dados los mismos valores como argumentos. El resultado podría cambiar entre sentencias SQL.
Sobre esta definición que quiere decir con que siempre devolverá el mismo resultado en una consulta individual de una tabla?
Las funciones estables pueden acceder a la base de datos para consultar, pero no pueden hacer inserts, ni updates. Entiendo que se refiere a que si entre dos llamadas a la función ocurre, por ejemplo, un update, la segunda llamada puede dar resultados distintos, pese a que los argumentos son los mismos. En las IMMUTABLE eso no puede pasar, ya que no acceden a la base.
Saludos a todos.
Saludos
Fin a la injusticia, LIBERTAD AHORA A NUESTROS CINCO COMPATRIOTAS QUE SE ENCUENTRAN INJUSTAMENTE EN PRISIONES DE LOS EEUU!
http://www.antiterroristas.cu
http://justiciaparaloscinco.wordpress.com
-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda(at)postgresql(dot)org<mailto:pgsql-es-ayuda(at)postgresql(dot)org><mailto:pgsql-es-ayuda(at)postgresql(dot)org<mailto:pgsql-es-ayuda(at)postgresql(dot)org>><mailto:pgsql-es-ayuda(at)postgresql(dot)org<mailto:pgsql-es-ayuda(at)postgresql(dot)org><mailto:pgsql-es-ayuda(at)postgresql(dot)org<mailto:pgsql-es-ayuda(at)postgresql(dot)org>>>)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda
________________________________
Fin a la injusticia, LIBERTAD AHORA A NUESTROS CINCO COMPATRIOTAS QUE SE ENCUENTRAN INJUSTAMENTE EN PRISIONES DE LOS EEUU!
http://www.antiterroristas.cu
http://justiciaparaloscinco.wordpress.com
Fin a la injusticia, LIBERTAD AHORA A NUESTROS CINCO COMPATRIOTAS QUE SE ENCUENTRAN INJUSTAMENTE EN PRISIONES DE LOS EEUU!
http://www.antiterroristas.cu
http://justiciaparaloscinco.wordpress.com
________________________________
Fin a la injusticia, LIBERTAD AHORA A NUESTROS CINCO COMPATRIOTAS QUE SE ENCUENTRAN INJUSTAMENTE EN PRISIONES DE LOS EEUU!
http://www.antiterroristas.cu
http://justiciaparaloscinco.wordpress.com
Fin a la injusticia, LIBERTAD AHORA A NUESTROS CINCO COMPATRIOTAS QUE SE ENCUENTRAN INJUSTAMENTE EN PRISIONES DE LOS EEUU!
http://www.antiterroristas.cu
http://justiciaparaloscinco.wordpress.com
________________________________
Fin a la injusticia, LIBERTAD AHORA A NUESTROS CINCO COMPATRIOTAS QUE SE ENCUENTRAN INJUSTAMENTE EN PRISIONES DE LOS EEUU!
http://www.antiterroristas.cu
http://justiciaparaloscinco.wordpress.com
Fin a la injusticia, LIBERTAD AHORA A NUESTROS CINCO COMPATRIOTAS QUE SE ENCUENTRAN INJUSTAMENTE EN PRISIONES DE LOS EEUU!
http://www.antiterroristas.cu
http://justiciaparaloscinco.wordpress.com
From | Date | Subject | |
---|---|---|---|
Next Message | Marcelo Pinto | 2012-07-25 20:13:13 | Problemas luego de Vacuum Analyze a tabla de 30 Gb |
Previous Message | Lazáro Rubén García Martínez | 2012-07-25 16:07:48 | RE: Diferencias entre IMMUTABLE y STABLE |