Hola Jaime Muchas gracias por la respuesta.... Pues esta tabla se emplea en muchas consultas (reportes) con diferentes joins y condiciones, por lo tanto no seria factible una función, voy a ver que podemos hacer desde jasper para enviar la fecha como una constante
El 7 de marzo de 2017, 19:35, Jaime Casanova<jaime.casan...@2ndquadrant.com> escribió: > 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 > -- Cordialmente, Ing. Hellmuth I. Vargas S. Esp. Telemática y Negocios por Internet Oracle Database 10g Administrator Certified Associate EnterpriseDB Certified PostgreSQL 9.3 Associate