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