Protokollierung in einer Datei im PostgreSQL-Windows-Dienst

11

Ich benötige eine Alternative, um den folgenden Befehl auszuführen:

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

Auf diese Weise startet der Server und meldet sich an C:\yyy\log\pgsql.log. Wenn ich jedoch versuche, den Server als Dienst zu registrieren, sind keine Protokollierungsoptionen verfügbar, und der Server meldet sich bei der Ereignisanzeige an. Aus der pg_ctl-Dokumentation:

pg_ctl register [-N Servicename] [-U Benutzername] [-P Passwort] [-D Datadir] [-S a [uto] | d [emand]] [-w] [-t Sekunden] [-s] [-o Optionen]

Wie kann ich den Server zwingen, sich bei einer Datei anzumelden? Hinweis: Ich möchte kein Ein-Klick-Installationsprogramm verwenden, sondern nur mit entpackten Binärdateien arbeiten.

Vic
quelle
Stellen Sie sicher, dass Sie die log_statementtolog_statement = 'all'
Chris

Antworten:

13

postgresql.confSuchen Sie Ihre im Datenverzeichnis

Suchen Sie den Abschnitt, der so aussieht

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

einfach auskommentieren und diese Parameter verwenden. Starten Sie dann den Postgres-Dienst neu.

Da Sie postgresql unter Windows ausführen, ist es möglich, dass Sie nicht bearbeiten dürfen, postgresql.confwährend der Dienst aktiv ist. Wenn das der Fall ist:

  • Fahren Sie den Postgres-Dienst herunter
  • bearbeiten postgresql.conf
  • Starten Sie den Postgres-Dienst

Versuche es !!!

RolandoMySQLDBA
quelle
Danke, dass du mich in die richtige Richtung gelenkt hast, Rolando, aber deine Antwort stimmt einfach nicht ... Wenn du die Konfigurationsdatei zitierst, kannst du sie nur dort haben stderr, csvlog, syslog, eventlog. Ich musste stattdessen die folgenden Eigenschaften ändern : logging_collector = on, log_directory = ..., log_filename=.... Wenn Sie Ihre Antwort bearbeiten, werde ich sie akzeptieren.
Vic
1
Hey Vic, danke. Ich bin ein Neuling bei PostgreSQL und unterstütze es nur geringfügig. Ich bin nur ein MySQL-DBA aus einem alten Land.
RolandoMySQLDBA
1
log_directory = 'C: / Benutzer / Peter / Dokumente / jonbloe / system / logs' hat bei mir funktioniert. Verwenden Sie jedoch nicht das Windows '\', da es als Escape dient und die Protokolle in einem Ordner PGDATA / UsersPeterDocumentsjonbloesystemlogs
peter2108