Vous n'êtes pas identifié(e).
Pages : 1
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
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)
@DanielVerite
http://blog-postgresql.verite.pro/
Hors ligne
Bonjour Daniel,
Effectivement c'est bien ça.
Dommage !
Merci.
Hors ligne
Pages : 1