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:13:56

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

Pied de page des forums