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
Pages : 1