Registrando em um arquivo no serviço Windows PostgreSQL

11

Preciso de uma alternativa para executar o seguinte comando:

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

Dessa forma, o servidor inicia e faz logon no C:\yyy\log\pgsql.log. Porém, quando tento registrar o servidor como um serviço - não há opções de log disponíveis e o servidor faz logon no Visualizador de Eventos. Da documentação pg_ctl:

pg_ctl register [-N servicename] [-U nome de usuário] [-P password] [-D datadir] [-S a [uto] | d [emand]] [-w] [-t segundos] [-s] [-o opções]

Como forçar o servidor a fazer login em um arquivo? Nota: Não quero usar o instalador com um clique, só quero trabalhar com binários descompactados.

Vic
fonte
Certifique-se de que você permitiu que o log_statementparalog_statement = 'all'
Chris

Respostas:

13

Localize o seu postgresql.confno datadir

Encontre a seção que se parece com isso

#------------------------------------------------------------------------------
# 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.

simplesmente remova o comentário e use esses parâmetros. Em seguida, reinicie o serviço postgres,

Como você está executando o postgresql no Windows, é possível que você não tenha permissão para editar postgresql.confenquanto o serviço estiver ativo. Se esse é o caso:

  • encerrar o serviço postgres
  • editar postgresql.conf
  • iniciar o serviço postgres

De uma chance !!!

RolandoMySQLDBA
fonte
Obrigado por me indicar a direção certa, Rolando, mas sua resposta não está correta ... Como você cita o arquivo de configuração, você só pode ter stderr, csvlog, syslog, eventloglá. Eu tive que mudar as seguintes propriedades em vez disso: logging_collector = on, log_directory = ..., log_filename=.... Se você editar sua resposta, eu a aceito.
Vic
11
Hey Vic, obrigado. Sou iniciante no PostgreSQL e ofereço pouco suporte a ele. Eu sou apenas um antigo país MySQL DBA.
RolandoMySQLDBA
11
log_directory = 'C: / Usuários / Peter / Documentos / jonbloe / system / logs' funcionou para mim. Mas não use do Windows '\' como ele funciona como uma fuga e os logs acabam em uma pasta PGDATA / UsersPeterDocumentsjonbloesystemlogs
peter2108