PostgreSQL protokolliert nicht

7

Ich verwende ArchLinuxund PostgreSQL9.4.4 und habe die Protokollierung in der Konfigurationsdatei aktiviert:

$ sudo egrep -v "^[[:blank:]]*($|#|//|/\*| \*|\*/)" /var/lib/postgres/data/postgresql.conf

max_connections = 1024          # (change requires restart)
shared_buffers = 128MB          # min 128kB
dynamic_shared_memory_type = posix  # the default is the first option
logging_collector = on      # Enable capturing of stderr and csvlog
log_directory = '/tmp'      # directory where log files are written,
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # log file name pattern,
log_file_mode = 0644            # creation mode for log files,
log_error_verbosity = verbose       # terse, default, or verbose messages
log_statement = 'all'           # none, ddl, mod, all
log_timezone = 'Asia/Jakarta'
datestyle = 'iso, dmy'
timezone = 'Asia/Jakarta'
lc_messages = 'en_CA.UTF-8'         # locale for system error message
lc_monetary = 'en_CA.UTF-8'         # locale for monetary formatting
lc_numeric = 'en_CA.UTF-8'          # locale for number formatting
lc_time = 'en_CA.UTF-8'             # locale for time formatting
default_text_search_config = 'pg_catalog.english'

Starten Sie dann den Dienst neu oder laden Sie ihn neu:

sudo systemctl restart postgresql
sudo systemctl reload postgresql

die geladenen Einstellungen:

postgres=# SELECT name, setting FROM pg_settings WHERE name LIKE '%log%';
            name             |            setting             
-----------------------------+--------------------------------
 log_autovacuum_min_duration | -1
 log_checkpoints             | off
 log_connections             | off
 log_destination             | stderr
 log_directory               | /tmp
 log_disconnections          | off
 log_duration                | off
 log_error_verbosity         | verbose
 log_executor_stats          | off
 log_file_mode               | 0644
 log_filename                | postgresql-%Y-%m-%d_%H%M%S.log
 log_hostname                | off
 log_line_prefix             | 
 log_lock_waits              | off
 log_min_duration_statement  | -1
 log_min_error_statement     | error
 log_min_messages            | warning
 log_parser_stats            | off
 log_planner_stats           | off
 log_rotation_age            | 1440
 log_rotation_size           | 10240
 log_statement               | all
 log_statement_stats         | off
 log_temp_files              | -1
 log_timezone                | Asia/Jakarta
 log_truncate_on_rotation    | off
 logging_collector           | on
 syslog_facility             | local0
 syslog_ident                | postgres
 wal_log_hints               | off
(30 rows)

die /tmpErlaubnis:

$ ll /tmp/ 
total 11656
drwxrwxrwt 22 root root       580 Jun 29 10:05 ./
drwxr-xr-x 17 root root      4096 Jun 10 08:04 ../
...

die /tmpVerwendung:

$ df | grep /tmp
tmpfs            8159996    31204   8128792   1% /tmp

Ich mache eine Abfrage psql, aber die wird /tmp/postgresql-*immer noch nicht angezeigt. Was kann ich tun, um herauszufinden, welches Teil die Erstellung eines Protokolls verhindert?

BEARBEITEN 1

das Ergebnis von journalctl -u postgresql

Oct 08 09:13:53 xxx postgres[19861]: LOG:  00000: redirecting log output to logging collector process
Oct 08 09:13:53 xxx postgres[19861]: HINT:  Future log output will appear in directory "/tmp".
Oct 08 09:13:53 xxx postgres[19861]: LOCATION:  SysLogger_Start, syslogger.c:645
Oct 08 09:13:55 xxx systemd[1]: Started PostgreSQL database server.
Kokizzu
quelle
Warum sollten Sie sich überhaupt anmelden /tmp? Ich verstehe jedoch nicht, warum es mit Ihrer gezeigten Konfiguration nicht funktionieren würde.
Craig Ringer
Nur für die Entwicklung / das Debuggen, damit es bei jedem Neustart gelöscht wird
Kokizzu
Wenn Sie Ihre PostgreSQL-bezogenen Prozesse überprüfen, sehen Sie eine postgres: logger process?
Dekso
@dezso ja postgres: logger processexistiert auf ps axAusgabe
Kokizzu
Können Sie die geladenen Einstellungen überprüfen, um sicherzugehen : SELECT name, settings FROM pg_settings WHERE name LIKE 'log%'?
MatheusOl

Antworten:

1

Der Protokollierungskollektor versucht, ihn zu erfassen stderrund in eine Datei zu schreiben. Aber es sieht so aus, als ob systemd den Umleitungskrieg gewinnt und die Ausgabe an das Journal sendet. Sie können das systemd-Journal überprüfen mit:

journalctl -u postgresql

Die Systemkonfiguration ist in usr/lib/systemd/system/postgresql.service. Ich habe verschiedene Einstellungen für ausprobiert StandardError, aber keine scheint es der regulären Postgres-Protokollierung zu ermöglichen, ihre Arbeit zu erledigen.

Andomar
quelle
Mit genau den gleichen Berechtigungen kann der postgresBenutzer /tmp/problemlos auf unseren Hosts schreiben .
Dekso
@dezso: Das ist unwahrscheinlich ... hast du mit getestet sudo -u postgres echo hi > /tmp/test.txt? Das läuft echoals Postgres aber die Weiterleitung als root. Die korrekte Syntax lautet sudo -u postgres bash -c 'echo hi > /tmp/test.txt'und sollte den Fehler "Berechtigung verweigert" anzeigen.
Andomar
Nein, ich bin angemeldet als postgres, kein Sudo nötig. Laufen die DB-Prozesse nicht grundsätzlich auf die gleiche Weise? Wie kommt das Öffnen einer neuen Shell in dieses Bild? (Beachten Sie, dass ich auf Ubuntu bin, aber das sollte keinen großen Unterschied machen, AFAIK.)
Dezso
3
Wenn die Berechtigungen für / tmp drwxrwxrwtwie gezeigt sind, bedeutet dies, dass jeder Benutzer darauf schreiben kann (ganz rechts wentsprechend anderen), was die normale Situation ist. Hier ist nichts falsch.
Daniel Vérité
@Andomar $ sudo -u postgres echo hi > /tmp/test.txtfunktioniert gut cat /tmp/test.txtgibt hi| Hier ist die journalctl Ausgabe:http://pastie.org/10264195
Kokizzu