Marcos Saldivar escribió:

> Entonces lo mas adecuado es no confiar a menos que las subconsultas
> cumplan con condiciones
> de como que no incluyeran un función volátil ???

Hmm ...

> por ejemplo:
> 
> db=> create table bar(id bigserial primary key);
> db=> create table foo(id bigserial primary key);
> db=> insert into foo select generate_series(1, 20);
> db=> insert into bar select generate_series(10, 50);

Tus tablas de ejemplo son muy chicas para mi gusto ... con unas 10000
tuplas en cada una sería más creíble y empezaría a usar indexscans donde
fuera apropiado (obviamente además debes crear los índices)

> db=> explain analyze select * from foo where true or 100 in (select id
> from bar);

Esto es muy diferente de tu pregunta porque el "true" es una constante
al tiempo de crear el plan.

> Lo que pretendo hacer es que la consulta en ultimo caso o en el caso
> mas complejo ejecute varias subconsultas. osea
> si el registro tiene un campo permiso = 't' de todos no tiene caso
> verificar permisos ya que todos tienen acceso, pero en caso de que el
> campo sea distinto de 't' si hay que verificar permisos y ahi entra el
> or osea, si permiso <> 't' hacer subconsulta...

Creo que debe haber maneras mejores de expresar esta consulta ...
probablemente un JOIN.  Cualquier cosa que involucre un indexscan y que
te libere del SubPlan debería salir mejor.

-- 
Alvaro Herrera                                http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.
--
TIP 3: Si encontraste la respuesta a tu problema, publícala, otros te lo 
agradecerán

Responder a