Vous n'êtes pas identifié(e).

#1 03/02/2011 13:20:03

mortimer.pw
Membre

Déconnecter un utilisateur

Bonjour à tous,

Je travaille sur une machine de test, en version 8.4.2 sous Red Hat 5.
Je suis en cours de lecture du livre "Admin Cookbook", je suis sur le sujet qui parle de déconnecter un utilisateur.
Je fais des éssais avec pg_terminate_backend() et pg_stat_activity mais je n'arrive pas au bon résultat.


Je me connecte, depuis mon PC XP, sur le serveur et je commence par faire un ps -ef | grep postgres

postgres  2604     1  0 Jan28 ?        00:00:01 /usr/local/pgsql/bin/postmaster -D /home/postgres/PG_DATA
postgres  2606  2604  0 Jan28 ?        00:00:00 postgres: logger process
postgres  2608  2604  0 Jan28 ?        00:00:00 postgres: writer process
postgres  2609  2604  0 Jan28 ?        00:00:00 postgres: wal writer process
postgres  2610  2604  0 Jan28 ?        00:00:00 postgres: autovacuum launcher process
postgres  2611  2604  0 Jan28 ?        00:00:01 postgres: stats collector process
postgres 12053  2604  0 Feb02 ?        00:00:00 postgres: postgres geo 127.0.0.1(44356) idle
postgres 12056  2604  0 Feb02 ?        00:00:00 postgres: postgres geo 127.0.0.1(44358) idle
postgres 12218  2604  0 Feb02 ?        00:00:00 postgres: postgres geo 127.0.0.1(53493) idle
postgres 12219  2604  0 Feb02 ?        00:00:00 postgres: postgres geo 127.0.0.1(53494) idle
postgres 12221  2604  0 Feb02 ?        00:00:00 postgres: postgres geo 127.0.0.1(53496) idle
root     19381  2450  0 11:24 ?        00:00:00 sshd: postgres [priv]
postgres 19384 19381  0 11:24 ?        00:00:00 sshd: postgres@pts/1
postgres 19385 19384  0 11:24 pts/1    00:00:00 -bash
postgres 20625 19385  0 12:07 pts/1    00:00:00 ps -ef
postgres 20626 19385  0 12:07 pts/1    00:00:00 grep postgres

Est-il normale de voir autant de chose ?


Ensuite, je lance, depuis mon PC, PgAdmin et je me connecte à une base du serveur, et je relance la commande ps -ef | grep postgres (j'ai remplacé mon adresse IP par [MON IP])

postgres  2604     1  0 Jan28 ?        00:00:01 /usr/local/pgsql/bin/postmaster -D /home/postgres/PG_DATA
postgres  2606  2604  0 Jan28 ?        00:00:00 postgres: logger process
postgres  2608  2604  0 Jan28 ?        00:00:00 postgres: writer process
postgres  2609  2604  0 Jan28 ?        00:00:00 postgres: wal writer process
postgres  2610  2604  0 Jan28 ?        00:00:00 postgres: autovacuum launcher process
postgres  2611  2604  0 Jan28 ?        00:00:01 postgres: stats collector process
postgres 12053  2604  0 Feb02 ?        00:00:00 postgres: postgres geo 127.0.0.1(44356) idle
postgres 12056  2604  0 Feb02 ?        00:00:00 postgres: postgres geo 127.0.0.1(44358) idle
postgres 12218  2604  0 Feb02 ?        00:00:00 postgres: postgres geo 127.0.0.1(53493) idle
postgres 12219  2604  0 Feb02 ?        00:00:00 postgres: postgres geo 127.0.0.1(53494) idle
postgres 12221  2604  0 Feb02 ?        00:00:00 postgres: postgres geo 127.0.0.1(53496) idle
root     19381  2450  0 11:24 ?        00:00:00 sshd: postgres [priv]
postgres 19384 19381  0 11:24 ?        00:00:00 sshd: postgres@pts/1
postgres 19385 19384  0 11:24 pts/1    00:00:00 -bash
postgres 20739  2604  0 12:11 ?        00:00:00 postgres: postgres postgres [MON IP](1621) idle
postgres 20740  2604  1 12:11 ?        00:00:00 postgres: postgres geo [MON IP](1622) idle
postgres 20741 19385  0 12:11 pts/1    00:00:00 ps -ef
postgres 20742 19385  0 12:11 pts/1    00:00:00 grep postgres


Je me connecte via psql et je fais un select * from pg_stat_activity;

datid | datname  | procpid | usesysid | usename  |          current_query          | waiting |          xact_start           |          query
_start          |         backend_start         |  client_addr   | client_port
-------+----------+---------+----------+----------+---------------------------------+---------+-------------------------------+---------------
----------------+-------------------------------+----------------+-------------
11564 | postgres |   20739 |       10 | postgres | <IDLE>                          | f       |                               | 2011-02-03 12:
11:41.487737+01 | 2011-02-03 12:11:41.219511+01 | [MON IP] |        1621
22662 | mabase      |   20740 |       10 | postgres | <IDLE>                          | f       |                               | 2011-02-03 12:
11:41.450619+01 | 2011-02-03 12:11:41.247088+01 | [MON IP] |        1622
22662 | mabase      |   20790 |       10 | postgres | select * from pg_stat_activity; | f       | 2011-02-03 12:13:59.239447+01 | 2011-02-03 12:
13:59.239447+01 | 2011-02-03 12:13:55.288704+01 |                |          -1
22662 | mabase      |   12053 |       10 | postgres | <IDLE>                          | f       |                               | 2011-02-02 11:
43:35.830329+01 | 2011-02-02 11:20:21.923329+01 | 127.0.0.1      |       44356
22662 | mabase      |   12056 |       10 | postgres | <IDLE>                          | f       |                               | 2011-02-02 12:
26:11.561325+01 | 2011-02-02 11:20:52.91473+01  | 127.0.0.1      |       44358
22662 | mabase      |   12218 |       10 | postgres | <IDLE>                          | f       |                               | 2011-02-02 11:
27:01.674583+01 | 2011-02-02 11:27:01.659435+01 | 127.0.0.1      |       53493
22662 | mabase      |   12219 |       10 | postgres | <IDLE>                          | f       |                               | 2011-02-02 11:
27:09.920393+01 | 2011-02-02 11:27:09.905238+01 | 127.0.0.1      |       53494
22662 | mabase      |   12221 |       10 | postgres | <IDLE>                          | f       |                               | 2011-02-02 12:
26:16.187483+01 | 2011-02-02 11:27:16.823725+01 | 127.0.0.1      |       53496
(8 rows)

Comment faire pour déconnecter mon PgAdmin ?

J'espère être clair, merci pour les réponses.

Hors ligne

#2 04/02/2011 00:57:17

gleu
Administrateur

Re : Déconnecter un utilisateur

Est-il normale de voir autant de chose ?

Sans plus d'infos, tout ce qu'on peut dire, c'est qu'il n'y a rien d'anormale en tout cas.

Comment faire pour déconnecter mon PgAdmin ?

pgAdmin a établit deux connexions. Une première avec la base postgres, une seconde avec la base mabase. Si vous voulez stopper une connexion, vous devez utiliser la procédure stockée pg_terminate_backend en lui fournissant en paramètre le PID du processus gérant la connexion (colonne procpid dans pg_stat_activity). Par exemple, pour dégager la connexion à la base mabase, il faudrait faire un :

SELECT pg_terminate_backend(20740);


Guillaume.

Hors ligne

#3 04/02/2011 09:46:27

mortimer.pw
Membre

Re : Déconnecter un utilisateur

Bonjour Guillaume,

Super, j'ai testé et déconnecté mon pgadmin, cela fonctionne, merci.

Concernant la commande PS de départ, je suis seul à utiliser la machine, les 2 seules appli java qui utilise le serveur sont arrêtées, les lignes suivantes sont-elles normales ?

postgres 12053  2604  0 Feb02 ?        00:00:00 postgres: postgres geo 127.0.0.1(44356) idle
postgres 12056  2604  0 Feb02 ?        00:00:00 postgres: postgres geo 127.0.0.1(44358) idle
postgres 12218  2604  0 Feb02 ?        00:00:00 postgres: postgres geo 127.0.0.1(53493) idle
postgres 12219  2604  0 Feb02 ?        00:00:00 postgres: postgres geo 127.0.0.1(53494) idle
postgres 12221  2604  0 Feb02 ?        00:00:00 postgres: postgres geo 127.0.0.1(53496) idle

Merci pour votre aide.

Hors ligne

#4 04/02/2011 12:36:28

gleu
Administrateur

Re : Déconnecter un utilisateur

Les lignes que vous montrez sont des connexions à la base. Si vous pensez qu'elles n'ont rien à faire là, redémarrez PostgreSQL, c'est le plus simple.


Guillaume.

Hors ligne

#5 04/02/2011 12:42:02

mortimer.pw
Membre

Re : Déconnecter un utilisateur

Excusez-moi Guillaume, mais le jour où je passe en production, je ne peux certainement pas redémarrer.
Comment peut-il rester des connexions ouvertes ?
N'y a t'il pas un moyen de les fermer automatiquement (par exemple aprés plusieurs heures) ?
Le fait d'avoir des connexions qui restent ouvertes peut-il dégrader les performances ?
Merci.

Hors ligne

#6 04/02/2011 12:51:28

gleu
Administrateur

Re : Déconnecter un utilisateur

Comment peut-il rester des connexions ouvertes ?

Parce que vous avez quelqu'un de connecté dessus.

N'y a t'il pas un moyen de les fermer automatiquement (par exemple aprés plusieurs heures) ?

Pas directement pas PostgreSQL mais il est possible d'avoir un script qui le fait. C'est dangereux mais pourquoi pas. Par exemple, voulez-vous vraiment fermer la connexion d'une sauvegarde même si celle-ci s'exécute depuis plusieurs heures (ce qui est normal dans certains cas).

Le fait d'avoir des connexions qui restent ouvertes peut-il dégrader les performances ?

Si elles ne font rien, non.


Guillaume.

Hors ligne

#7 04/02/2011 13:34:51

mortimer.pw
Membre

Re : Déconnecter un utilisateur

Vous avez raison, ce peut être dangereux.
Par contre, je suis certains que personne n'est connecté.
A moins que les applis java ne laissent des connexions ouvertes mais quand je quitte. Est-ce possible ?
De plus, ce sont des connexions locales, puisque j'ai "127.0.0.1" comme IP ?

Hors ligne

#8 05/02/2011 02:06:15

gleu
Administrateur

Re : Déconnecter un utilisateur

Oui, c'est bien l'IP du client qui est affiché, donc ce sont bien des connexions locales. Si personne n'est connecté actuellement, ça a pu être dû à un problème réseau ou de firewall. Étant donné que ça concerne l'interface locale, je parierais pour un firewall logiciel qui aurait coupé méchamment la connexion.


Guillaume.

Hors ligne

Pied de page des forums