2009-09-16 7 views
4

J'ai activé la connexion à ma base de données Postgres (exécutée sur Ubuntu 32 bits) et je souhaite enregistrer uniquement les requêtes effectuées par les applications utilisateur. J'ai configuré postgres comme suit:Enregistrer uniquement les requêtes utilisateur dans Postgres

log_destination = 'syslog' 
syslog_facility = 'L*emphasized text*OCAL0' 
syslog_ident = 'postgres' 
log_min_messages = notice 
log_min_duration_statement = 0 
log_duration = off 
log_line_prefix = 'user=%u,db=%d ' 
log_statement = 'none' 

En syslog.conf j'ai configuré pour chaque journal fait à local0 être redirigés vers /var/log/pgsql.

Cependant, Postgres est l'exploitation forestière beaucoup de questions que je ne me soucie pas, par exemple:

WHEN typbasetype=0 THEN oid else typbasetype END AS 
Sep 16 12:22:28 or-ubuntu postgres[14086]: [11-2] basetype 
Sep 16 12:22:28 or-ubuntu postgres[14086]: [11-3] ^I FROM pg_type WHERE oid=1043 
Sep 16 12:22:28 or-ubuntu postgres[14086]: [12-1] user=postgres,db=prueba LOG: duración: 0.361 ms sentencia: SELECT format_type(oid,-1) as typname FROM pg_type WHERE oid = 2950 
Sep 16 12:22:28 or-ubuntu postgres[14086]: [13-1] user=postgres,db=prueba LOG: duración: 0.348 ms sentencia: SELECT CASE WHEN typbasetype=0 THEN oid else typbasetype END AS 
Sep 16 12:22:28 or-ubuntu postgres[14086]: [13-2] basetype 
Sep 16 12:22:28 or-ubuntu postgres[14086]: [13-3] ^I FROM pg_type WHERE oid=2950 
Sep 16 12:22:28 or-ubuntu postgres[14086]: [14-1] user=postgres,db=prueba LOG: duración: 0.451 ms sentencia: SELECT format_type(oid,104) as typname FROM pg_type WHERE oid = 
Sep 16 12:22:28 or-ubuntu postgres[14086]: [14-2] 1043 
Sep 16 12:22:28 or-ubuntu postgres[14086]: [15-1] user=postgres,db=prueba LOG: duración: 0.353 ms sentencia: SELECT CASE WHEN typbasetype=0 THEN oid else typbasetype END AS 
Sep 16 12:22:28 or-ubuntu postgres[14086]: [15-2] basetype 
Sep 16 12:22:28 or-ubuntu postgres[14086]: [15-3] ^I FROM pg_type WHERE oid=1043 

Est-il possible d'éviter ces lignes d'être connecté?

Merci à l'avance

Diego

Répondre

4

Si vos applications utilisent leurs propres rôles (comme ils le devraient), vous pouvez modifier les paramètres appropriés pour ces rôles uniquement avec "ALTER ROLE":

ALTER ROLE <account> SET log_statement = 'all'; 

(ou "log_min_duration_statement = 0" comme il est dans la configuration).

+0

J'ai des rôles pour différentes parties de mon application. Donc, en utilisant cet extrait, je pourrais configurer Postgres pour enregistrer les requêtes uniquement pour cet utilisateur? Ou mieux encore, empêcher un rôle de se connecter? Cela fonctionne aussi pour les utilisateurs? par exemple: ALTER USER ...... – Diego

0

Non, du point de vue du serveur PostgreSQL, toutes les requêtes sont égales. Ceux-ci proviennent de certains clients, et il n'y a aucun moyen pour le serveur de savoir ce qui vous intéresse.

Il vaut probablement mieux post-traiter vos fichiers journaux - peut-être que c'est aussi simple qu'un "grep" sur eux?

(je suppose ici que vous voulez quelques requêtes enregistrées - sinon, vous devez définir log_min_duration_statement à -1)

Questions connexes