Comment activer la journalisation de tout SQL exécuté par PostgreSQL 8.3?
Modifié (plus d'infos) j'ai changé ces lignes:
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_statement = 'all'
Et redémarrez le service PostgreSQL ... mais aucun journal n'a été créé ... J'utilise Windows Server 2003.
Des idées?
postgresql
logging
Paul
la source
la source
logging_collector = on
systemctl restart postgresql
peut que le service PostgreSQL que vous avez configuré ne redémarre pas réellement (je ne comprends pas encore pourquoi), donc les changements dans le fichier de configuration ne seront pas appliqués. Il est plus sûr à utiliserpg_ctl
(oupg_ctlcluster
sur Debian).systemctl reload postgresql
,systemctl restart postgresql
,service postgresql reload
etservice postgresql restart
tous les changements de configuration efficace rends.Réponses:
Dans votre
data/postgresql.conf
fichier, changez lelog_statement
paramètre en'all'
.Éditer
En regardant vos nouvelles informations, je dirais qu'il peut y avoir quelques autres paramètres à vérifier:
log_destination
variablelogging_collector
log_directory
répertoire existe déjà à l'intérieur dudata
répertoire et que l'utilisateur postgres peut y écrire.la source
pg_ctl reload
ALTER SYSTEM
commande, un superutilisateur peut définir des paramètres GUC à partir de SQL.data
répertoire cité dans la réponse n'est pas son nom littéral; il fait référence au chemin assigné à ladata_directory
variable dans le fichier de configuration de PostgreSQL. Sur Debian et Ubuntu GNU / Linux, ce fichier réside généralement à/etc/postgresql/$v/main/postgresql.conf
, où$v
est la version du serveur. En outre, sur les systèmes susmentionnés, lorsquelog_destination = 'stderr'
la sortie est écrite/var/log/postgresql/postgresql-$v-main.log
, où$v
est la version du serveur (et non à un emplacement à l'intérieurdata_directory
).Modifiez votre
/etc/postgresql/9.3/main/postgresql.conf
et modifiez les lignes comme suit.Remarque : Si vous n'avez pas trouvé le
postgresql.conf
fichier, tapez simplement$locate postgresql.conf
un terminal#log_directory = 'pg_log'
àlog_directory = 'pg_log'
#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
àlog_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
#log_statement = 'none'
àlog_statement = 'all'
#logging_collector = off
àlogging_collector = on
Facultatif :
SELECT set_config('log_statement', 'all', true);
sudo /etc/init.d/postgresql restart
ousudo service postgresql restart
Requête d'incendie dans PostgreSQL
select 2+2
Rechercher la connexion actuelle
/var/lib/pgsql/9.2/data/pg_log/
Les fichiers journaux ont tendance à augmenter considérablement au fil du temps et peuvent tuer votre machine. Pour votre sécurité, écrivez un script bash qui supprimera les journaux et redémarrera le serveur postgresql.
Merci @paul, @Jarret Hardie, @ Zoltán, @Rix Beck, @Latif Premani
la source
# log_destination = 'stderr'
le fichier de configuration avant que cela ne fonctionne.log_filename = 'postgresql-%d.log'
suit : et non, il ne sera pas écrasé après chaque redémarrage, il s'ajoutera pour chaque jour et sera écrasé chaque mois. Bien sûr, il existe différents jours selon le mois 28,29,30,31 - mais vous avez l'idée.Avec un droit d'utilisateur correspondant, vous pouvez utiliser la requête ci-dessus après la connexion. Cela affectera la journalisation jusqu'à la fin de la session.
la source
SET log_statement = 'all'
ou (pour le niveau de transaction)SET LOCAL log_statement = 'all'
. Vous pourriez également être intéressé par les paramètresclient_min_messages
etlog_min_messages
.permission denied to set parameter "log_statement"
puisque mon utilisateur n'est pas superutilisateur.GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON { FUNCTION function_name ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) [, ...] | ALL FUNCTIONS IN SCHEMA schema_name [, ...] } TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
Vous devez également ajouter ces lignes dans PostgreSQL et redémarrer le serveur:
la source
Required to be on for csvlogs
, pensant que cette option était de consigner la sortie de la requête et pas seulement les instructions, mais ce n'est pas le cas.Pour info: les autres solutions n'enregistrent que les instructions de la base de données par défaut - généralement
postgres
- pour en enregistrer d'autres; commencer par leur solution; puis:Réf: https://serverfault.com/a/376888 /
log_statement
la source
Réglez
log_statement
surall
:Rapport d'erreurs et journalisation - log_statement
la source
+1 aux réponses ci-dessus. J'utilise la configuration suivante
la source
Juste pour avoir plus de détails sur CentOS 6.4 (Red Hat 4.4.7-3) exécutant PostgreSQL 9.2, basé sur les instructions trouvées sur cette page Web :
log_statement = 'all'
etlog_min_error_statement = error
dans/var/lib/pgsql/9.2/data/postgresql.conf
./usr/pgsql-9.2/bin/pg_ctl reload -D /var/lib/pgsql/9.2/data/
./var/lib/pgsql/9.2/data/pg_log/
la source
pg_ctl reload
est suffisant et n'interrompt pas les connexions. Pas convaincu que cette réponse ajoute quoi que ce soit à ceux déjà là.Vous devez également définir ce paramètre pour consigner chaque instruction:
la source
J'essayais de définir le
log_statement
fichier de configuration dans certains postgres mais en fait le fichier n'a pas été lu par nos postgres.J'ai confirmé qu'en utilisant la demande:
J'utilise de cette façon https://stackoverflow.com/a/41912295/2294168
la source