On 7 March 2017 at 18:02, Hellmuth Vargas <hiv...@gmail.com> wrote:
>
> Tengo un servidor PostgreSQL 9.6 en le cual implemente particionamiento (por
> fecha) sobre una tabla, pues sobre esta tabla se generan reportes mensuales
> de gran cantidad de registros, ajuste el parámetro constraint_exclusion = on
> para qeu excluyera las tablas que no estan en le rango, Hice una prueba y
> funciona como se espera:
>
[...]
>
> Pero si cambio el formato de la  fechas (porque realmente esta consulta esta
> dentro de un jasper y las fechas son parámetros y por lo tanto se
> concadenan):
>

Esto funciona así desde siempre y la explicación es que postgres
decide que particiones leer antes de llegar al executor (no recuerdo
si en tiempo de parsing o planning, creería que en el segundo).

Debido a que la consulta aun no empieza a ejecutarse (porque eso
ocurre, obviamente, en el executor) postgres no ha resuelto funciones
ni expresiones y por lo tanto no puede decidir eliminar particiones
basándose en eso.

La condición para que excluya particiones *tiene* que ser una
constante. La única solución real, si es que no puedes enviar la fecha
armada, es que escondas la consulta en una función almacenada usando
SQL dinamico y concatenes lo que envias como una constante usando algo
parecido a una función como la que te pongo de ejemplo (la cual tiene
cabos sueltos):


CREATE OR REPLACE FUNCTION consulta_dinamica(v_fecha_i text, v_hora_i
text, v_fecha_f text, v_hora_f text)
     RETURNS algo AS
$$
   begin
       EXECUTE 'SELECT q.evento,count(*)
                          FROM queue_log q
                       WHERE q.fecha  BETWEEN cast(' || v_fecha_i || '
' || v_hora_i || ' as timestamp )
                             AND                               cast('
|| v_fecha_f || ' ' || v_hora_f || ' as timestamp )
                        GROUP BY 1';
  end;
$$
LANGUAGE 'plpgsql';


-- 
Jaime Casanova                      www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

-
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