Re: Diferencia entre timestamp a interval en formato horas

2018-05-01 Thread Jairo Graterón
Saludos


with t as (
Select inicial, final, final - inicial, date_part('day',final - inicial) as
d_day, date_part('hour',final-inicial) as d_hour,
date_part('minute',final-inicial) as d_min,
date_part('second',final-inicial) as d_sec
 from tiempos)

 select inicial, final, (d_day * 24 + d_hour || ':' || d_min || ':' ||
d_sec) as diferencia from t
 order by d_day DESC, d_hour DESC, d_min DESC, d_sec DESC

2018-03-16 19:59:34;2018-03-18 07:58:49;35:59:15
2018-03-15 07:39:57;2018-03-15 21:06:44;13:26:47
2018-03-15 21:06:44;2018-03-16 07:55:20;10:48:36
2018-03-16 07:55:20;2018-03-16 15:38:58; 7:43:38
2018-03-18 07:58:49;2018-03-18 14:34:34; 6:35:45
2018-03-16 15:38:58;2018-03-16 19:59:34; 4:20:36

No existe horas de 35 o más por eso lo convertí en texto y para ordenar se
usa los campos d_day, d_hour, d_min y d_sec


El 1 de mayo de 2018, 22:56, mauricio pullabuestan 
escribió:

> Buen día.
>
> Tengo los siguientes datos de ejemplo
>
> Create table tiempos (inicial timestamp, final timestamp);
>
> Insert Into tiempos
> Values
> ('2018-03-15 07:39:57', '2018-03-15 21:06:44'),
> ('2018-03-15 21:06:44', '2018-03-16 07:55:20'),
> ('2018-03-16 07:55:20', '2018-03-16 15:38:58'),
> ('2018-03-16 15:38:58', '2018-03-16 19:59:34'),
> ('2018-03-16 19:59:34', '2018-03-18 07:58:49'),
> ('2018-03-18 07:58:49', '2018-03-18 14:34:34');
>
> Select inicial, final, final - inicial As diferencia
>  from tiempos;
>
>
> InicialFinal
> Diferencia
> 2018-03-15 07:39:57 2018-03-15 21:06:44 13:26:47
> 2018-03-15 21:06:44 2018-03-16 07:55:20 10:48:36
> 2018-03-16 07:55:20 2018-03-16 15:38:58 07:43:38
> 2018-03-16 15:38:58 2018-03-16 19:59:34 04:20:36
> 2018-03-16 19:59:34 2018-03-18 07:58:49 1 day 11:59:15
> 2018-03-18 07:58:49 2018-03-18 14:34:34 06:35:45
>
>
> Cuando la diferencia es mayor a un día me muestra 1 day 11:59:15, necesito
> que me muestre en formato de horas, es decir 35:59:15, así cuando haga un
> balance de la columna diferencia mantenga el formato de horas.
>
>
> With t
> AS
> (
> Select inicial, final, final - inicial As diferencia
>  from tiempos
> )
> Select *
>  , sum(diferencia)
>OVER(ORDER BY inicial
>  ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS balance
>  From t;
>
> Inicial Final
> Diferenciabalance
> 2018-03-15 07:39:57 2018-03-15 21:06:44 13:26:47
>  13:26:47
> 2018-03-15 21:06:44 2018-03-16 07:55:20 10:48:36
> 24:15:23
> 2018-03-16 07:55:20 2018-03-16 15:38:58 07:43:38
>   31:59:01
> 2018-03-16 15:38:58 2018-03-16 19:59:34 04:20:36
>   36:19:37
> 2018-03-16 19:59:34 2018-03-18 07:58:49 1 day 11:59:15
>  1 day 48:18:52
> 2018-03-18 07:58:49 2018-03-18 14:34:34 06:35:45
>   1 day 54:54:37
>
> Aquí se me muestra como lo necesito incluso cuando el tiempo es mayor a
> 24:00 h, pero se encuentra con un valor 1 day el formato es otro, como
> puedo hacer para que todos los cálculos se muestren en formato hora?
>
>
> Saludos
> Mauricio
>
>


Diferencia entre timestamp a interval en formato horas

2018-05-01 Thread mauricio pullabuestan
Buen día.

Tengo los siguientes datos de ejemplo

Create table tiempos (inicial timestamp, final timestamp);

Insert Into tiempos
Values
('2018-03-15 07:39:57', '2018-03-15 21:06:44'), 
('2018-03-15 21:06:44', '2018-03-16 07:55:20'), 
('2018-03-16 07:55:20', '2018-03-16 15:38:58'), 
('2018-03-16 15:38:58', '2018-03-16 19:59:34'), 
('2018-03-16 19:59:34', '2018-03-18 07:58:49'), 
('2018-03-18 07:58:49', '2018-03-18 14:34:34');

Select inicial, final, final - inicial As diferencia
 from tiempos;


Inicial    Final    
Diferencia
2018-03-15 07:39:57 2018-03-15 21:06:44 13:26:47
2018-03-15 21:06:44 2018-03-16 07:55:20 10:48:36
2018-03-16 07:55:20 2018-03-16 15:38:58 07:43:38
2018-03-16 15:38:58 2018-03-16 19:59:34 04:20:36
2018-03-16 19:59:34 2018-03-18 07:58:49 1 day 11:59:15
2018-03-18 07:58:49 2018-03-18 14:34:34 06:35:45


Cuando la diferencia es mayor a un día me muestra 1 day 11:59:15, necesito que 
me muestre en formato de horas, es decir 35:59:15, así cuando haga un balance 
de la columna diferencia mantenga el formato de horas.


With t
AS 
(
Select inicial, final, final - inicial As diferencia
 from tiempos 
)
Select *
 , sum(diferencia) 
       OVER(ORDER BY inicial 
 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS balance
 From t;

Inicial     Final    
Diferenciabalance
2018-03-15 07:39:57 2018-03-15 21:06:44 13:26:47           
13:26:47
2018-03-15 21:06:44 2018-03-16 07:55:20 10:48:36            
24:15:23
2018-03-16 07:55:20 2018-03-16 15:38:58 07:43:38                
31:59:01
2018-03-16 15:38:58 2018-03-16 19:59:34 04:20:36                
36:19:37
2018-03-16 19:59:34 2018-03-18 07:58:49 1 day 11:59:15       1 
day 48:18:52
2018-03-18 07:58:49 2018-03-18 14:34:34 06:35:45                
1 day 54:54:37

Aquí se me muestra como lo necesito incluso cuando el tiempo es mayor a 24:00 
h, pero se encuentra con un valor 1 day el formato es otro, como puedo hacer 
para que todos los cálculos se muestren en formato hora?


Saludos
Mauricio



Re: Log de conexion

2018-05-01 Thread Jairo Graterón
Saludos,

De repente hay alguna solución más optima pero usé esta manera

primero crear una tabla en una BD distinta a la de producción

create table auditoria_session
(
idauditoria serial not null,
datname name not null,
usename name not null,
application_name text not null,
client_addr inet not null,
client_port integer not null,
backend_start timestamp not null,
primary key(idauditoria),
unique ( datname, usename, application_name, client_addr, client_port,
backend_start)
);


Y en un proceso aparte ( un programa en C, Python) se hace una consulta a
pg_stat_activity cada dos o tres segundos para no crear carga en el
servidor, se guardan los registros que no estén en auditoria_session.


insert into auditoria_session (datname, usename, application_name,
client_addr, client_port, backend_start)
select datname, usename, application_name, client_addr, client_port,
backend_start from pg_stat_activity
where (datname, usename, application_name, client_addr, client_port,
backend_start ) NOT IN
(select datname, usename, application_name, client_addr, client_port,
backend_start from auditoria_session)

Unos cientos de registros diarios no creo que ocupen mucho en el disco,
pero se pueden eliminar algunos datos cada ciertos meses.



El 30 de abril de 2018, 19:19, Carlos Edward Grajales Marmolejo <
cgraja...@colombiasoftware.net> escribió:

>
> Buenas tardes.
>
> Alguien de la lista sabe si existe alguna forma de capturar las conexiones
> realizadas a una base de datos?, diferente al log de postgres???
>
> Requiero saber la siguiente informacion:
> 1. ip de conexion
> 2. base de datos de conexion
> 3. fecha y hora de conexion
> 4. cualquier informacion adicional.
>
>
> Se wue mediante el log de porstgres se puede obtener esta informacion, sin
> embargo quisiera saber si existe un metodo alternativo.
>
> Algo asi como un trigger que se dispare al momento de la conexion y poder
> almacenar dicha informacion en una tabla independiente desde que cliente lo
> haga (psql, pgadmin, software, aplicacion, etc).
>
> O si dicha informacion esta presente en alguna tabla para recolectarla..
>
>
> Gracias por la colaboracion.
>
>
>
> --
> --
>
>
>
> Cordialmente,
>
> *Carlos Edward Grajales*
> Colombia Software Ltda.
>
>- Calle 26N# 5AN-67
>
> Cali - Colombia
> www.colombiasoftware.net
> Cel. 318 359 46 15
> Tel: (2) 487 64 66
>


Re: Log de conexion

2018-05-01 Thread Lucas Luengas
Hola
Si estás en Linux quizás te ayude activar el firewall iptables. Con esto
capturas la ip y la fecha hora
Y quizás te ayude también como herramienta externa en Linux algún software
tipo middleware como pgpool.
Con pgpool se puede activar log de las conexiones, por defecto no viene.
Aunque no deseas usar postgres para coger la información, comentarte aunque
supongo que lo sabrás que se puede hacer log en formato CSV o similar, que
ayuda a tratarlo más cómodo.
Saludos

On May 1, 2018 1:20 AM, "Carlos Edward Grajales Marmolejo" <
cgraja...@colombiasoftware.net> wrote:

>
> Buenas tardes.
>
> Alguien de la lista sabe si existe alguna forma de capturar las conexiones
> realizadas a una base de datos?, diferente al log de postgres???
>
> Requiero saber la siguiente informacion:
> 1. ip de conexion
> 2. base de datos de conexion
> 3. fecha y hora de conexion
> 4. cualquier informacion adicional.
>
>
> Se wue mediante el log de porstgres se puede obtener esta informacion, sin
> embargo quisiera saber si existe un metodo alternativo.
>
> Algo asi como un trigger que se dispare al momento de la conexion y poder
> almacenar dicha informacion en una tabla independiente desde que cliente lo
> haga (psql, pgadmin, software, aplicacion, etc).
>
> O si dicha informacion esta presente en alguna tabla para recolectarla..
>
>
> Gracias por la colaboracion.
>
>
>
> --
> --
>
>
>
> Cordialmente,
>
> *Carlos Edward Grajales*
> Colombia Software Ltda.
>
>- Calle 26N# 5AN-67
>
> Cali - Colombia
> www.colombiasoftware.net
> Cel. 318 359 46 15
> Tel: (2) 487 64 66
>


Re: Detectar modificacion de un tramo de una linea Postgis

2018-05-01 Thread Felipe Guzman
por qué no ves la tabla (registro) de geometría como texto y así haces la
comparacion , st_astext
Puede que al ser texto sea más rápida la comparación.


Saludos!!

El lun., 30 de abr. de 2018 5:46 PM, Hellmuth Vargas 
escribió:

> Hola Lista
>
> Pues lo que se me ocurre es mantener la informacion de geometría en una
> tabla aparte donde nunca se actualice sino que inserte  (como control
> cambios) y de esa manera cuando 'editen' se inserte y luego compare con la
> ultima versión anterior almacenada
>
>
> algo como, ejemplo:
>
> tabla ciudad(
> id,
> nombre,
> poblacion,
> departamento,
> pais
> )
>
> tabla perimetro_ciudad(
> id
> the_geom,
> fecha_creacion,
> vigente,  -- activo
> ciudad_id  references  ciudad(id)
> )
>
>
>
>
>
>
>
>
> El 30 de abril de 2018, 11:48, jvenegasperu
> escribió:
>
>> Hola buen dia
>>
>> Quiza alguien tenga una situación similar.
>>
>> Un usuario a traves de postgis tiene unas lineas trazadas sobre la ciudad
>> que representan un recorrido con miles de vertices. por diversors factores
>> ese recorrido puede ser alterado entonces si el linestring tenia 14
>> vertices luego de la modificación ahora tiene 17 vertices porque se
>> agregaron 3 tramos mas de lineas igual puede ocurrir si se suprimen por
>> ejemplo 5 vertices.
>>
>> En este caso el linestring a pesar de tener miles de vertices se trata de
>> un unico registro en base de datos una linea con muchisimos tramos.
>>
>> alguna idea de como podria detectar en que tramos de este unico
>> linestring ocurrieron los cambios?
>>
>> Actualmente lo que hago es cada vez que se modifica la geometria se
>> dispara uin trigger que actualiza otras tablas pero me compara todos los
>> tramos y ya se esta haciendo pesado. en cambio si solo actuara sobre las
>> geometrais de las otras tablas donde por interseccion ocurrio la
>> modificacion seria mucho mas rapido.
>>
>> saludos
>>
>> --
>> José Mercedes Venegas Acevedo
>> cel Mov RPC 964185205
>>
>>
>>
>
>
> --
> Cordialmente,
>
> Ing. Hellmuth I. Vargas S.
>
>