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 [federicoemarti...@gmail.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 
<lgarc...@vnz.uci.cu<mailto:lgarc...@vnz.uci.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 
[federicoemarti...@gmail.com<mailto:federicoemarti...@gmail.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 
<lgarc...@vnz.uci.cu<mailto:lgarc...@vnz.uci.cu><mailto:lgarc...@vnz.uci.cu<mailto:lgarc...@vnz.uci.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 
[federicoemarti...@gmail.com<mailto:federicoemarti...@gmail.com><mailto:federicoemarti...@gmail.com<mailto:federicoemarti...@gmail.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 
<lgarc...@vnz.uci.cu<mailto:lgarc...@vnz.uci.cu><mailto:lgarc...@vnz.uci.cu<mailto:lgarc...@vnz.uci.cu>><mailto:lgarc...@vnz.uci.cu<mailto:lgarc...@vnz.uci.cu><mailto:lgarc...@vnz.uci.cu<mailto:lgarc...@vnz.uci.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@postgresql.org<mailto:pgsql-es-ayuda@postgresql.org><mailto:pgsql-es-ayuda@postgresql.org<mailto:pgsql-es-ayuda@postgresql.org>><mailto:pgsql-es-ayuda@postgresql.org<mailto:pgsql-es-ayuda@postgresql.org><mailto:pgsql-es-ayuda@postgresql.org<mailto:pgsql-es-ayuda@postgresql.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
-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

Responder a