web-dev-qa-db-ja.com

PostgreSQLのクエリを記録する方法

PostgreSQL 8.3で実行された全てのSQLのロギングを有効にするにはどうすればいいですか?

編集(詳細)これらの行を変更しました。

log_directory = 'pg_log'                    
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_statement = 'all'

そしてPostgreSQLサービスを再起動してください...しかしログが作成されていません...私はWindows Server 2003を使用しています。

何か案は?

338
Paul

data/postgresql.confファイルで、log_statement設定を'all'に変更します。


編集

あなたの新しい情報を見て、私は確認するために他のいくつかの設定があるかもしれないと言うでしょう:

  • log_destination変数をオンにしていることを確認してください
  • 必ずlogging_collectorをオンにしてください
  • また、log_directoryディレクトリがdataディレクトリの中にすでに存在していることと、postgresユーザがそれに書き込めることを確認してください。
423
Jarret Hardie

/etc/postgresql/9.3/main/postgresql.confを編集して、以下のように行を変更してください。

postgresql.confファイルが見つからなかった場合は、端末で$locate postgresql.confと入力してください。

  1. #log_directory = 'pg_log'からlog_directory = 'pg_log'

  2. #log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'からlog_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'

  3. #log_statement = 'none'からlog_statement = 'all'

  4. #logging_collector = offからlogging_collector = on

  5. オプションSELECT set_config('log_statement', 'all', true);

  6. Sudo /etc/init.d/postgresql restartまたはSudo service postgresql restart

  7. Postgresqlでクエリを起動するselect 2+2

  8. 現在のログを/var/lib/pgsql/9.2/data/pg_log/で探す

ログファイルは時間とともに大きくなる傾向があり、あなたのマシンを殺すかもしれません。安全のため、ログを削除してpostgresqlサーバーを再起動するbashスクリプトを作成してください。

@ Paul、@ Jarret Hardie、@Zoltán、@ Rix Beck、@ Latif Premaniに感謝します

88
vijay
SELECT set_config('log_statement', 'all', true);

対応するユーザー権限では、接続後に上記のクエリを使用できます。これはセッションが終了するまでロギングに影響します。

37
Rix Beck

また、PostgreSQLにこれらの行を追加してサーバを再起動する必要があります。

log_directory = 'pg_log'                    
log_filename = 'postgresql-dateformat.log'
log_statement = 'all'
logging_collector = on
34
Latif Premani

log_statementallに設定します。

エラー報告とログ記録 - log_statement

24
Chad Birch

FYI:他の解決策は他のものをログに記録するためにデフォルトデータベースからのステートメント(通常はpostgres)のみをログ記録するでしょう。彼らの解決策から始めましょう。その後:

ALTER DATABASE your_database_name
SET log_statement = 'all';

参照: https://serverfault.com/a/376888 / log_statement

20
A T

上記の答えに+1します。私は以下の設定を使用します

log_line_prefix = '%t %c %u ' # time sessionid user
log_statement = 'all'
20
Shekhar

PostgreSQL 9.2を実行しているCentOS 6.4(Red Hat 4.4.7-3)の詳細については、 このWebページ上 の説明に基づいてください。

  1. log_statement = 'all'log_min_error_statement = error/var/lib/pgsql/9.2/data/postgresql.confを設定(コメント解除)します。
  2. PostgreSQL設定をリロードします。私にとっては、これは/usr/pgsql-9.2/bin/pg_ctl reload -D /var/lib/pgsql/9.2/data/を実行することによって行われました。
  3. 今日のログを/var/lib/pgsql/9.2/data/pg_log/で探す
10
Zoltán