Re: [pgsql-es-ayuda] Consulta sobre Split

2017-03-20 Por tema Mario Sileone (GM)

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" >
Fecha: 8 mar. 2017 3:27 PM
Asunto: Re: [pgsql-es-ayuda] no aplica constraint_exclusion con 
concadenacion de parametros
Para: "Jaime Casanova" >
Cc: "Lista Postgres ES" >


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> escribió:

On 7 March 2017 at 18:02, Hellmuth Vargas > 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.



-- Mensaje reenviado --
De: "Mario Sileone (GM)" >
Fecha: 20 mar. 2017 6:35 PM
Asunto: [pgsql-es-ayuda] Consulta sobre Split
Para: "pgsql-es-ayuda" >

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 )
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda








Re: [pgsql-es-ayuda] Consulta sobre Split

2017-03-20 Por tema Hellmuth Vargas
Hola Mario

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




-- Mensaje reenviado --
De: "Hellmuth Vargas" 
Fecha: 8 mar. 2017 3:27 PM
Asunto: Re: [pgsql-es-ayuda] no aplica constraint_exclusion con
concadenacion de parametros
Para: "Jaime Casanova" 
Cc: "Lista Postgres ES" 

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
escribió:

> On 7 March 2017 at 18:02, Hellmuth Vargas  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.



-- Mensaje reenviado --
De: "Mario Sileone (GM)" 
Fecha: 20 mar. 2017 6:35 PM
Asunto: [pgsql-es-ayuda] Consulta sobre Split
Para: "pgsql-es-ayuda" 
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)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda


[pgsql-es-ayuda] Consulta sobre Split

2017-03-20 Por tema Mario Sileone (GM)

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)
Para cambiar tu suscripci�n:
http://www.postgresql.org/mailpref/pgsql-es-ayuda


Re: [pgsql-es-ayuda] migracion de versiones

2017-03-20 Por tema Jaime Casanova
2017-03-19 12:04 GMT-05:00 Francisco Olarte :
>
> Si es una copia de los archivos de datos depende de la version. Desde
> hace un tiempo exite un programa "pg_upgrade" capaz de actualizar un
> directorio de una version a otra

condiciones para el uso de pg_upgrade:

- la versión vieja debe estar en 8.3 o superior (podría funcionar con
anteriores pero no es seguro)
- las dos versiones de postgres deben estar instaladas

> De todas formas conviene que se lea las "release notes" desde la
> version antigua a la nueva, para ver si existen problemas.
>

definitivo

> Dicho esto, sobre todo si va a cambiar de servidor, yo le recomendaria
> un dump+restore, con el dump en formato custom ( -Fc ).

sin olvidar el "pg_dumpall -g" para los roles y tablespaces

Además, si la versión vieja es anterior a 8.3 (muy vieja) habría que
tener presente que no necesariamente la aplicación va a trabajar a
menos que hagas algunos ajustes

-- 
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


Re: [pgsql-es-ayuda] Funcion Postgresql update a SQL SERVER

2017-03-20 Por tema Francisco Olarte
Ruben:

2017-03-20 6:20 GMT+01:00 Ruben avila galindo :
> Hola amigos queria saber si puedo hacer una funcion en PostgreSQL pero que
> en la funcion actualize una BD de SQL SERVER.

Divide et impera. Primero intenta modificar un SQL server desde
cualquier parte de postgres. Yo para eso miraria de buscar los Foreign
Data Wrappers sobre TDS que hay por ahi. Con eso puedes 'importar' una
tabla de sql server y verla local en postgres. Entonces solo te queda
hacer una funcion que actualize dos tablas en postgres.

Eso si, 
> create function sp_actualizar_stock

Ten en cuenta los disaster-recovery. Cuando manipulas dos BD a la vez
sin un gestor de transacciones global tienes la posibilidad de que
cuando haya problemas se te desincronizen, con lo que deberias tener
un mecanismo para corregirlos. Lo digo concretamente por el nombre
"stock", he tenido algun caso de sincronizar stocks en dos servidores
y aunque era dificil ( has de tener el problema entre que el sistema
hace commit en uno y el otro, la ventana es pequeña ) conseguia tener
discrepancias ( que solucionaba pegando un barrido de las tablas de
vez en cuando ).

Francisco Olarte.

-
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