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>