Gracias Hellmuh es exactamente lo que me sucede.

Saludos!



El 20/03/2017 a las 22:44, Hellmuth Vargas escribió:
Hola Mario

Creo que tiene la misma situación que yo, le reenvío la respuesta en mi caso




---------- Mensaje reenviado ----------
De: "Hellmuth Vargas" <hiv...@gmail.com <mailto:hiv...@gmail.com>>
Fecha: 8 mar. 2017 3:27 PM
Asunto: Re: [pgsql-es-ayuda] no aplica constraint_exclusion con concadenacion de parametros Para: "Jaime Casanova" <jaime.casan...@2ndquadrant.com <mailto:jaime.casan...@2ndquadrant.com>> Cc: "Lista Postgres ES" <pgsql-es-ayuda@postgresql.org <mailto:pgsql-es-ayuda@postgresql.org>>

    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
    <mailto:jaime.casan...@2ndquadrant.com>> escribió:

        On 7 March 2017 at 18:02, Hellmuth Vargas <hiv...@gmail.com
        <mailto: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 <http://www.2ndQuadrant.com>
        PostgreSQL Development, 24x7 Support, Remote DBA, Training &
        Services




-- Cordialmente,

    Ing. Hellmuth I. Vargas S.



---------- Mensaje reenviado ----------
De: "Mario Sileone (GM)" <msile...@gmail.com <mailto:msile...@gmail.com>>
Fecha: 20 mar. 2017 6:35 PM
Asunto: [pgsql-es-ayuda] Consulta sobre Split
Para: "pgsql-es-ayuda" <pgsql-es-ayuda@postgresql.org <mailto:pgsql-es-ayuda@postgresql.org>>
Cc:

    Estimados, buenas noches.

        Tengo una consulta respecto a las tablas divididas. Tenemos
    una división en tablas que tienen millones de registros diarios,
    en tablas heredadas mensuales.

    Todo funciona de maravillas, salvo que, hemos notado que las
    consultas con variables (between now() - interval '8 hours' AND
    now()) no hacen caso y busca en todas las tablas heredadas.

    Lo vimos en un explain con las variables y luego uno con las
    fechas literales.

    La pregunta es, al margen que tenemos la solución mediante código,
    si existe algun método o quizás un quote_literal que transforme la
    consulta a literal o alguna manera para que el postgres la
    interprete como tal.

    Desde ya muchas gracias!

    Saludos



    -
    Enviado a la lista de correo pgsql-es-ayuda
    (pgsql-es-ayuda@postgresql.org <mailto:pgsql-es-ayuda@postgresql.org>)
    Para cambiar tu suscripción:
    http://www.postgresql.org/mailpref/pgsql-es-ayuda
    <http://www.postgresql.org/mailpref/pgsql-es-ayuda>




Responder a