RE: Diferencias entre IMMUTABLE y STABLE

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

In response to

Browse pgsql-es-ayuda by date

  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