PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

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

#1 30/10/2017 13:14:00

mortimer.pw
Membre

Compter les connexions

Bonjour,
Je travaille avec une base 9.6.5 sous CentOS 7.
J'ai fait une petite fonction, qui prend en paramètre le nom d'une base de données, fait un SELECT sur PG_STAT_ACTIVITY pour voir les connexions et leur état, puis alimente une table avec les infos collectées.

Description de la Fonction :
CREATE OR REPLACE FUNCTION dba.inf_conn(cdb character varying)
  RETURNS void AS
$BODY$
DECLARE
    RConn RECORD;
BEGIN
    DELETE FROM DBA.conn_snap WHERE EXTRACT(DAYS FROM CURRENT_TIMESTAMP-now)::INTEGER>2;
    FOR RConn IN    SELECT CURRENT_TIMESTAMP AS now,conn.usename,conn.state,conn.nb_conn
            FROM (SELECT usename,state,COUNT(*) AS nb_conn FROM pg_stat_activity WHERE pid <> PG_BACKEND_PID() AND datname=cdb GROUP BY usename,state) conn LOOP
        INSERT INTO DBA.conn_snap(now,utilisateur,etat_conn,nb_conn) VALUES(RConn.now,RConn.usename,RConn.state,RConn.nb_conn);
    END LOOP;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

Description de la Table :
CREATE TABLE dba.conn_snap
(
  id serial NOT NULL,
  now timestamp with time zone NOT NULL,
  utilisateur character varying(30) NOT NULL,
  etat_conn text,
  nb_conn integer NOT NULL DEFAULT 0,
  CONSTRAINT pk_conn_snap PRIMARY KEY (id)
)
WITH (
  OIDS=FALSE
);

Le problème est que le champ STATE de la requête sur PG_STAT_ACTIVITY semble ne rien renvoyer comme valeur.
Alors que si j'exécute la requête manuellement, j'ai bien souvent 'idle'.

Pouvez-vous m'aider ?

Hors ligne

#2 30/10/2017 15:08:37

dverite
Membre

Re : Compter les connexions

Quand on est superutilisateur on voit le contenu de "state" pour tout le monde, alors que quand on ne l'est pas, on ne voit une valeur non-vide que pour les sessions de son propre compte.


A mon avis manuellement vous n'êtes pas connecté avec le même compte que celui qui appelle cette fonction et qui voit "state" à NULL pour les sessions des autres.

Dernière modification par dverite (30/10/2017 15:09:41)

Hors ligne

#3 30/10/2017 15:17:37

mortimer.pw
Membre

Re : Compter les connexions

Bonjour Daniel,
Effectivement c'est bien ça.
Dommage !
Merci.

Hors ligne

Pied de page des forums