Iniciar sesión en un archivo en el servicio de Windows PostgreSQL

11

Necesito una alternativa para ejecutar el siguiente comando:

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

De esta manera, el servidor se inicia y se registra C:\yyy\log\pgsql.log. Sin embargo, cuando intento registrar el servidor como un servicio, no hay opciones de registro disponibles y el servidor se registra en el Visor de eventos. De la documentación de pg_ctl:

pg_ctl registrarse [-N nombre de servicio] [-U nombre de usuario] [-P contraseña] [-D datadir] [-S a [uto] | d [emand]] [-w] [-t segundos] [-s] [-o opciones]

¿Cómo puedo forzar al servidor a iniciar sesión en un archivo? Nota: No quiero usar el instalador de un clic, solo quiero trabajar con binarios descomprimidos.

Vic
fuente
Asegúrese de que ha habilitado la log_statementalog_statement = 'all'
Chris

Respuestas:

13

Ubique su postgresql.confen el datadir

Encuentra la sección que se ve así

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

simplemente descomente y use estos parámetros. Luego, reinicie el servicio postgres,

Como está ejecutando postgresql en Windows, es posible que no se le permita editar postgresql.confmientras el servicio está activo. Si ese es el caso:

  • cerrar el servicio postgres
  • editar postgresql.conf
  • iniciar el servicio postgres

Darle una oportunidad !!!

RolandoMySQLDBA
fuente
Gracias por indicarme la dirección correcta, Rolando, pero tu respuesta simplemente no es correcta ... Al citar el archivo de configuración, solo puedes tenerlo stderr, csvlog, syslog, eventlogallí. Tenía que cambiar las siguientes propiedades en su lugar: logging_collector = on, log_directory = ..., log_filename=.... Si editas tu respuesta, la aceptaré.
Vic
1
Hola Vic, gracias. Soy un novato en PostgreSQL y le proporciono un soporte menor. Solo soy un viejo país MySQL DBA.
RolandoMySQLDBA
1
log_directory = 'C: / Users / Peter / Documents / jonbloe / system / logs' funcionó para mí. Pero no use Windows '\' ya que funciona como un escape y los registros terminan en una carpeta PGDATA / UsersPeterDocumentsjonbloesystemlogs
peter2108