web-dev-qa-db-ja.com

PostgreSQL 9.1でSQLステートメントのログ記録を無効にできない

Windows Server 2008 R2でPostgreSQL 9.1を実行しています。 postgresql.confファイルを変更して、SQLステートメントのstderrログへのロギングを有効にしましたが、すべてのロギングをオフにしないと、ロギングを無効にできないようです。サーバーにpg_ctl reloadを介してSIGHUPシグナルが送信され、これを修正しようとするたびにサービスが再起動されました。マシン全体を再起動しても、効果がないようです。

これを達成しているはずの現在のpostgresql.confの特定の行。

log_destination = 'stderr'
logging_collector = on
log_directory = 'pg_log
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
#debug_print_parse = off
#debug_print_rewritten = off
#debug_print_plan = off
#debug_pretty_print = on
#log_checkpoints = off
#log_connections = off
#log_disconnections = off
#log_duration = off
#log_error_verbosity = default
log_hostname = on
log_line_prefix = '%t %a %u %r '
#log_lock_waits = off
log_statement = 'none'  
#track_activities = on
#track_counts = on
#track_functions = none     
#track_activity_query_size = 1024
#update_process_title = on
#stats_temp_directory = 'pg_stat_tmp'

マニュアルを確認しました。設定ファイルのlog_statement行が適切に設定されていることを確認するだけでよいようです。

ただし、実際にログに記録される内容に影響を与えるようには思えません。 logging_collectorをオフにすると、テキストログファイルが生成されなくなります。これは、PostgreSQLが少なくとも正しいpostgres.confファイルを指していること、およびPostgreSQLがそのファイルを読み取って構成を決定していることを示します。

SQLステートメントのログをオフにするにはどうすればよいですか?

5
Matt

リストにない関連設定がいくつかあります。章を確認してください マニュアルの「いつログするか」 、特にこれらの設定:

log_min_messages (enum)
log_min_error_statement (enum)
log_min_duration_statement (integer) -- as @Jack already hinted in his comment.
5

ALTER USER someuser SET log_statement = 'all';またはALTER DATABASE somedb SET log_statement = 'all'をいただけますか?

これらの設定は、適用されるDB /ユーザーのpostgresql.confに設定されているデフォルトを上書きします。

これが事実である場合、新しく作成されたユーザーを使用して新しく作成されたデータベースに接続すると、しないステートメントがログに記録されることがわかります。

これが事実であることが判明した場合は、次のコマンドで削除します。

ALTER USER someuser RESET log_statement;
ALTER DATABASE somedb RESET log_statement;
4
Craig Ringer