Se connecter à un fichier dans le service Windows PostgreSQL


11

J'ai besoin d'une alternative pour exécuter la commande suivante:

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

De cette façon, le serveur démarre et se connecte à C:\yyy\log\pgsql.log. Lorsque j'essaie d'enregistrer le serveur en tant que service, aucune option de journalisation n'est disponible et le serveur se connecte à l'Observateur d'événements. De la documentation de pg_ctl:

pg_ctl register [-N servicename] [-U username] [-P password] [-D datadir] [-S a [uto] | d [emand]] [-w] [-t secondes] [-s] [-o options]

Comment forcer le serveur à se connecter à un fichier? Remarque: je ne veux pas utiliser le programme d'installation en un clic, je veux juste travailler avec des fichiers binaires décompressés.


Assurez-vous d'avoir activé le log_statementtolog_statement = 'all'
Chris

Réponses:


13

Localisez votre postgresql.confdans le datadir

Trouvez la section qui ressemble à ceci

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

décommentez simplement et utilisez ces paramètres. Ensuite, redémarrez le service postgres,

Étant donné que vous exécutez postgresql dans Windows, il est possible que vous ne soyez pas autorisé à modifier postgresql.confpendant que le service est en cours. Si c'est le cas:

  • arrêter le service postgres
  • Éditer postgresql.conf
  • démarrer le service postgres

Essaie !!!


Merci de m'avoir indiqué la bonne direction, Rolando, mais votre réponse n'est tout simplement pas la bonne ... En citant le fichier de configuration, vous ne pouvez que l'avoir stderr, csvlog, syslog, eventlog. Je devais changer les propriétés suivantes au lieu: logging_collector = on, log_directory = ..., log_filename=.... Si vous modifiez votre réponse, je l'accepterai.
Vic

1
Salut Vic, merci. Je suis novice chez PostgreSQL et je lui apporte un support mineur. Je suis juste un ancien DBA MySQL de pays.
RolandoMySQLDBA

1
log_directory = 'C: / Users / Peter / Documents / jonbloe / system / logs' a fonctionné pour moi. Mais n'utilisez pas le Windows '\' car cela fonctionne comme une fuite et les journaux se retrouvent dans un dossier PGDATA / UsersPeterDocumentsjonbloesystemlogs
peter2108
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.