PostgreSQL Windowsサービスのファイルへのロギング


11

次のコマンドを実行するための代替手段が必要です。

C:\xxx\pgsql\bin\pg_ctl" -D "C:\xxx\pgsql\data" -l "C:\yyy\log\pgsql.log" start

このようにして、サーバーが起動し、にログインしC:\yyy\log\pgsql.logます。ただし、サーバーをサービスとして登録しようとすると、ログオプションが使用できず、サーバーはイベントビューアにログを記録します。pg_ctlのドキュメントから:

pg_ctl register [-N servicename] [-U username] [-P password] [-D datadir] [-S a [uto] | d [emand]] [-w] [-t秒] [-s] [-oオプション]

サーバーにファイルへのログインを強制するにはどうすればよいですか?注:ワンクリックインストーラーを使用したくありません。解凍したバイナリで作業したいだけです。


必ず有効にしてくださいlog_statementlog_statement = 'all'
クリス

回答:


13

postgresql.confdatadirであなたを見つけてください

このようなセクションを見つけます

#------------------------------------------------------------------------------
# ERROR REPORTING AND LOGGING
#------------------------------------------------------------------------------

# - Where to Log -

#log_destination = 'stderr'             # Valid values are combinations of
                                        # stderr, csvlog, syslog and eventlog,
                                        # depending on platform.  csvlog
                                        # requires logging_collector to be on.

# This is used when logging to stderr:
#logging_collector = off                # Enable capturing of stderr and csvlog
                                        # into log files. Required to be on for
                                        # csvlogs.
                                        # (change requires restart)

# These are only used if logging_collector is on:
#log_directory = 'pg_log'               # directory where log files are written,
                                        # can be absolute or relative to PGDATA
#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'        # log file name pattern,
                                        # can include strftime() escapes
#log_truncate_on_rotation = off         # If on, an existing log file of the
                                        # same name as the new log file will be
                                        # truncated rather than appended to.
                                        # But such truncation only occurs on
                                        # time-driven rotation, not on restarts
                                        # or size-driven rotation.  Default is
                                        # off, meaning append to existing files
                                        # in all cases.
log_rotation_age = 7d                   # Automatic rotation of logfiles will
                                        # happen after that time.  0 disables.
#log_rotation_size = 10MB               # Automatic rotation of logfiles will
                                        # happen after that much log output.
                                        # 0 disables.

これらのパラメーターのコメントを外して使用します。次に、postgresサービスを再起動し、

Windowsでpostgresqlを実行しているためpostgresql.conf、サービスの稼働中は編集できない場合があります。その場合は:

  • postgresサービスをシャットダウンします
  • 編集する postgresql.conf
  • postgresサービスを開始する

試してみる !!!


Rolandoさん、正しい方向を教えてくれてありがとうございます。しかし、あなたの答えは正しくありません...構成ファイルを引用すると、stderr, csvlog, syslog, eventlogそこにしか存在できません。代わりに次のプロパティを変更する必要がありましたlogging_collector = on, log_directory = ..., log_filename=...。あなたがあなたの答えを編集するならば、私はそれを受け入れます。
Vic

1
Vicさん、ありがとう。私はPostgreSQLの初心者であり、マイナーサポートを提供しています。私は古い国のMySQL DBAです。
RolandoMySQLDBA 2012年

1
log_directory = 'C:/ Users / Peter / Documents / jonbloe / system / logs'がうまくいきました。それはエスケープとして動作し、ログがフォルダPGD​​ATA / UsersPeterDocumentsjonbloesystemlogsに終わるとしてではなく、Windowsのを「\」を使用しないでください
peter2108
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.