Jak włączyć rejestrowanie całego SQL wykonywanego przez PostgreSQL 8.3?
Edytowane (więcej informacji) Zmieniłem następujące linie:
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_statement = 'all'
I ponownie uruchom usługę PostgreSQL ... ale nie utworzono dziennika ... Używam Windows Server 2003.
Jakieś pomysły?
postgresql
logging
Paweł
źródło
źródło
logging_collector = on
systemctl restart postgresql
może nie zrestartować skonfigurowanej usługi PostgreSQL (jeszcze nie rozumiem dlaczego), więc zmiany w pliku konfiguracyjnym nie zostaną zastosowane. Bezpieczniej jest używaćpg_ctl
(lubpg_ctlcluster
na Debianie).systemctl reload postgresql
,systemctl restart postgresql
,service postgresql reload
iservice postgresql restart
wszystko czyni konfiguracja zmienia skuteczne.Odpowiedzi:
W swoim
data/postgresql.conf
pliku zmieńlog_statement
ustawienie na'all'
.Edytować
Patrząc na nowe informacje, powiedziałbym, że może istnieć kilka innych ustawień do weryfikacji:
log_destination
zmiennąlogging_collector
log_directory
katalog już istnieje wdata
katalogu i że użytkownik postgres może do niego pisać.źródło
pg_ctl reload
ALTER SYSTEM
poleceniu administrator może ustawiać parametry GUC z SQL.data
Katalog cytowana w odpowiedzi nie jest jego nazwa dosłowny; odnosi się do ścieżki przypisanej dodata_directory
zmiennej w pliku konfiguracyjnym PostgreSQL. W systemach Debian i Ubuntu GNU / Linux plik ten zwykle znajduje się w miejscu/etc/postgresql/$v/main/postgresql.conf
, gdzie$v
jest wersja serwera. Również w wyżej wymienionych systemach, kiedylog_destination = 'stderr'
dane wyjściowe są zapisywane/var/log/postgresql/postgresql-$v-main.log
, gdzie$v
jest wersja serwera (nie do jakiejś lokalizacji w środkudata_directory
).Edytuj
/etc/postgresql/9.3/main/postgresql.conf
i zmień linie w następujący sposób.Uwaga : jeśli nie znalazłeś
postgresql.conf
pliku, po prostu wpisz$locate postgresql.conf
terminal#log_directory = 'pg_log'
dolog_directory = 'pg_log'
#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
dolog_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
#log_statement = 'none'
dolog_statement = 'all'
#logging_collector = off
dologging_collector = on
Opcjonalnie :
SELECT set_config('log_statement', 'all', true);
sudo /etc/init.d/postgresql restart
lubsudo service postgresql restart
Zapytanie ogniowe w postgresql
select 2+2
Znajdź aktualne logowanie
/var/lib/pgsql/9.2/data/pg_log/
Pliki dziennika często rosną z czasem i mogą zabić Twój komputer. Dla własnego bezpieczeństwa napisz skrypt bash, który usunie dzienniki i zrestartuje serwer postgresql.
Dzięki @paul, @Jarret Hardie, @ Zoltán, @Rix Beck, @Latif Premani
źródło
# log_destination = 'stderr'
plik konfiguracyjny, zanim to zadziałało.log_filename = 'postgresql-%d.log'
i nie, nie będzie to nadpisywać po każdym ponownym uruchomieniu, będzie dołączane na każdy dzień i nadpisuje co miesiąc. Oczywiście są różne dni w zależności od miesiąca 28, 29, 30, 31 - ale masz pomysł.Przy odpowiednim prawie użytkownika może skorzystać z powyższego zapytania po połączeniu. Wpłynie to na rejestrowanie do zakończenia sesji.
źródło
SET log_statement = 'all'
lub (na poziomie transakcji)SET LOCAL log_statement = 'all'
. Możesz być także zainteresowany ustawieniamiclient_min_messages
ilog_min_messages
.permission denied to set parameter "log_statement"
ponieważ mój użytkownik nie jest superużytkownikiem.GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON { FUNCTION function_name ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) [, ...] | ALL FUNCTIONS IN SCHEMA schema_name [, ...] } TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
Musisz także dodać te wiersze w PostgreSQL i zrestartować serwer:
źródło
Required to be on for csvlogs
, że ta opcja polega na rejestrowaniu danych wyjściowych zapytania, a nie tylko instrukcji, ale tak nie jest.FYI: Inne rozwiązania rejestrują tylko instrukcje z domyślnej bazy danych - zwykle
postgres
- w celu rejestrowania innych; zacznij od ich rozwiązania; następnie:Patrz: https://serverfault.com/a/376888 /
log_statement
źródło
Ustaw
log_statement
naall
:Raportowanie i rejestrowanie błędów - log_statement
źródło
+1 do powyższych odpowiedzi. Używam następującej konfiguracji
źródło
Aby uzyskać więcej informacji na temat CentOS 6.4 (Red Hat 4.4.7-3) z systemem PostgreSQL 9.2, w oparciu o instrukcje znajdujące się na tej stronie :
log_statement = 'all'
ilog_min_error_statement = error
we/var/lib/pgsql/9.2/data/postgresql.conf
./usr/pgsql-9.2/bin/pg_ctl reload -D /var/lib/pgsql/9.2/data/
./var/lib/pgsql/9.2/data/pg_log/
źródło
pg_ctl reload
jest wystarczające i nie przerywa połączeń. Nie jestem przekonany, że ta odpowiedź dodaje coś do tych, które już tu są.Należy również ustawić ten parametr, aby rejestrował każdą instrukcję:
źródło
Próbowałem ustawić
log_statement
plik konfiguracyjny Postgres, ale w rzeczywistości plik ten nie został odczytany przez nasz postgres.Potwierdziłem, że korzystając z żądania:
Używam w ten sposób https://stackoverflow.com/a/41912295/2294168
źródło