Вот как получить список последних действий в PostgreSQL через CLI:
sudo -u postgres psql -c "SELECT pid, usename, application_name, query_start, query FROM pg_stat_activity WHERE state = 'active' ORDER BY query_start DESC;"
# Просмотр лог-файла (путь уточните в конфиге)
sudo tail -n 50 /var/log/postgresql/postgresql-14-main.log
# Или с фильтрацией по времени:
sudo grep "statement:" /var/log/postgresql/postgresql-14-main.log | tail -n 20
sudo -u postgres psql -c "SELECT now() - query_start as runtime, usename, query FROM pg_stat_activity WHERE state = 'active' AND query NOT LIKE '%pg_stat_activity%' ORDER BY runtime DESC;"
Добавьте в postgresql.conf
:
log_statement = 'all' # или 'mod' для только изменяющих запросов
log_duration = on
logging_collector = on
Затем перезапустите PostgreSQL:
sudo systemctl restart postgresql
# Установка
sudo apt install pgbadger
# Генерация отчета
pgbadger /var/log/postgresql/postgresql-14-main.log -o report.html
sudo -u postgres psql -c "SELECT xact_start, usename, query FROM pg_stat_activity WHERE xact_start IS NOT NULL ORDER BY xact_start DESC LIMIT 10;"
Установите pg_top
:
sudo apt install pgtop
sudo pg_top -U postgres
sudo
/var/lib/postgresql/...
)log_statement = 'all'
Пример вывода активных запросов:
pid | usename | application_name | query_start | query
-------+----------+-----------------------+-------------------------------+-----------------------------------------------------------
19456 | api_user | psql | 2024-03-20 14:05:42.123456+00 | SELECT * FROM users WHERE email = 'test@example.com';
Для постоянного мониторинга лучше использовать специализированные инструменты типа: