Como habilitar o log de todos os SQL executados pelo PostgreSQL 8.3?
Editado (mais informações) eu mudei estas linhas:
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_statement = 'all'
E reinicie o serviço PostgreSQL ... mas nenhum log foi criado ... Estou usando o Windows Server 2003.
Alguma ideia?
postgresql
logging
Paulo
fonte
fonte
logging_collector = on
systemctl restart postgresql
na verdade, não é possível reiniciar o serviço PostgreSQL que você configurou (ainda não entendo o porquê), portanto, as alterações no arquivo de configuração não serão aplicadas. É mais seguro de usarpg_ctl
(oupg_ctlcluster
no Debian).systemctl reload postgresql
,systemctl restart postgresql
,service postgresql reload
eservice postgresql restart
todos tornam alterações de configuração eficaz.Respostas:
No seu
data/postgresql.conf
arquivo, altere alog_statement
configuração para'all'
.Editar
Observando suas novas informações, eu diria que pode haver algumas outras configurações para verificar:
log_destination
variávellogging_collector
log_directory
diretório já existe dentro dodata
diretório e se o usuário do postgres pode gravá-lo.fonte
pg_ctl reload
ALTER SYSTEM
comando, um superusuário pode definir parâmetros GUC a partir do SQL.data
diretório citado na resposta não é seu nome literal; refere-se ao caminho atribuído àdata_directory
variável no arquivo de configuração do PostgreSQL. No Debian e no Ubuntu GNU / Linux, esse arquivo geralmente reside em/etc/postgresql/$v/main/postgresql.conf
, onde$v
está a versão do servidor. Além disso, nos sistemas mencionados acima, quandolog_destination = 'stderr'
a saída é gravada em/var/log/postgresql/postgresql-$v-main.log
, onde$v
está a versão do servidor (não em algum local internodata_directory
).Edite seu
/etc/postgresql/9.3/main/postgresql.conf
e altere as linhas da seguinte maneira.Nota : Se você não encontrou o
postgresql.conf
arquivo, basta digitar$locate postgresql.conf
um terminal#log_directory = 'pg_log'
paralog_directory = 'pg_log'
#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
paralog_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
#log_statement = 'none'
paralog_statement = 'all'
#logging_collector = off
paralogging_collector = on
Opcional :
SELECT set_config('log_statement', 'all', true);
sudo /etc/init.d/postgresql restart
ousudo service postgresql restart
Consulta de incêndio no postgresql
select 2+2
Encontre o login atual
/var/lib/pgsql/9.2/data/pg_log/
Os arquivos de log tendem a crescer muito com o tempo e podem matar sua máquina. Para sua segurança, escreva um script bash que exclua os logs e reinicie o servidor postgresql.
Obrigado @paul, @Jarret Hardie, @ Zoltán, @Rix Beck e @Latif Premani
fonte
# log_destination = 'stderr'
o arquivo de configuração antes que isso funcionasse.log_filename = 'postgresql-%d.log'
e não, ele não será substituído após cada reinicialização, será anexado a cada dia e substituído a cada mês. É claro que existem dias diferentes, dependendo do mês 28,29,30,31 - mas você entendeu.Com um usuário correspondente, o direito pode usar a consulta acima após a conexão. Isso afetará o log até a sessão terminar.
fonte
SET log_statement = 'all'
ou (para o nível da transação)SET LOCAL log_statement = 'all'
. Você também pode estar interessado nas configuraçõesclient_min_messages
elog_min_messages
.permission denied to set parameter "log_statement"
já que meu usuário não é superusuário.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 ]
Você também precisa adicionar estas linhas no PostgreSQL e reiniciar o servidor:
fonte
Required to be on for csvlogs
, pensando que essa opção era registrar a saída da consulta e não apenas as instruções, mas não é o caso.FYI: As outras soluções registrarão apenas declarações do banco de dados padrão - geralmente
postgres
- para registrar outras; comece com a solução; então:Ref: https://serverfault.com/a/376888 /
log_statement
fonte
Defina
log_statement
comoall
:Relatório e registro de erros - log_statement
fonte
+1 nas respostas acima. Eu uso a seguinte configuração
fonte
Apenas para ter mais detalhes sobre o CentOS 6.4 (Red Hat 4.4.7-3) executando o PostgreSQL 9.2, com base nas instruções encontradas nesta página da web :
log_statement = 'all'
elog_min_error_statement = error
em/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/
fonte
pg_ctl reload
é suficiente e não interrompe as conexões. Não convencido de que esta resposta acrescente algo aos que já estão aqui.Você também deve definir este parâmetro para registrar todas as instruções:
fonte
Eu estava tentando definir o
log_statement
arquivo de configuração em alguns postgres, mas na verdade o arquivo não foi lido pelos nossos postgres.Confirmei que usando a solicitação:
Eu uso desta maneira https://stackoverflow.com/a/41912295/2294168
fonte