On Wed, Jan 20, 2021 at 4:36 PM Javier Lugo Porras <jlu...@hotmail.com> wrote:
>
> Hola a todos,
> esta funcion que les copio me trabaja muy bien con postgresql 9-5, migre
> a la 10.15, y no esta funcionando a traves de un proceso .cmd en
> windows, sin embargo lo ejecuto usando pgadmin Y trabaja muy bien.  El
> user que lo llama es SUPERUSUARIO, me manda un error  en la Linea 1...No
> es cuestion de ROLES, ya que si realiza otras sentencias (INSERT) sin
> problemas.
>

Y cual es el mensaje de error?

además, no es que desconfíe de ti pero puedes mostrar el resultado de
la consulta:
SELECT rolname, rolsuper FROM pg_authid WHERE rolname = 'nombre del usuario';

otras cosas que puedes revisar, estas seguro que estas conectado a la
base de datos correcta?

> El proceso  elimina los usuarios conectados a la bd CONECTADOS,  despues
> de 1hora y superiores a 15minutos,  (para liberar las conexiones
> muertas). Migre a la version 10 y no me esta trabajando,   Este proceso
> lo tengo a ejecutarse cada 15 minutos y me mantiene el sitio
> FRESH!...PERO ahora tengo que estar REVISANDO!...

la función sigue funcionando, el problema tiene que forzosamente estar
de tu lado porque no es falla de la base.

por cierto, el problema real es el que describes (que se quedan
conexiones abiertas tanto tiempo) y no que pg_terminate_backend() por
algún motivo "no esté funcionando". has analizado porque se quedan
tanto tiempo esas conexiones?

mi teoría, sin ninguna evidencia a la mano, es que las consultas que
no se están muriendo está aún ejecutando alguna consulta (state =
'active') y la consulta está en un punto que no acepta señales

>
> SELECT pg_terminate_backend(pid)
> FROM   pg_stat_activity
> WHERE  pid <> pg_backend_pid()
> AND (datname = 'CLIENTE') AND (usename = 'U1' or usename = 'U2')
> AND (extract(hour from (current_timestamp - state_change)) >= 1
> OR  extract(minute from (current_timestamp - state_change)) >= 15);
>

Esta consulta no considera el estado de las consultas, le da igual si
están en ejecución ('active'), esperando actividad ('idle') o
esperando actividad en una transacción ('idle in transaction'). es a
proposito?

quizá te sirvan los parámetros
(https://www.postgresql.org/docs/10/runtime-config-client.html):
- statement_timeout
- idle_in_transaction_session_timeout

-- 
Jaime Casanova
SystemGuards
Consultores de PostgreSQL


Reply via email to