Перейти к содержанию

Проблемы PostgreSQL

DataHUB не запускается: ошибка подключения к PostgreSQL

Симптом: в логах Connection refused, password authentication failed или database does not exist.

Проверить:

  1. PostgreSQL запущен: docker ps или pg_isready -h localhost -p 5432.
  2. Параметры подключения в конфигурации DataHUB: хост, порт, имя базы, пользователь, пароль.
  3. Пользователь существует и имеет права на базу:
    \l   -- список баз
    \du  -- список пользователей
    
  4. Сетевая доступность порта 5432 если PostgreSQL на другом хосте.

Ошибка при обновлении: миграция не прошла

Симптом: DataHUB запускается, но падает при попытке выполнить Flyway/Liquibase миграцию.

Причины: - База не пуста, а скрипт ожидает чистую схему. - Пользователь не имеет прав CREATE TABLE / ALTER TABLE. - Конфликт версий миграций (изменён чекsum уже применённого скрипта).

Действие: 1. Проверить логи DataHUB — там указана конкретная миграция и ошибка. 2. Предоставить необходимые права пользователю. 3. При конфликте чексуммы — выяснить, был ли скрипт изменён после применения; не изменять уже применённые миграции.

Медленные запросы

Симптом: DataHUB работает, но сообщения обрабатываются медленно при больших объёмах.

Анализ:

-- Медленные запросы (если включено pg_stat_statements)
SELECT query, calls, total_exec_time / calls AS avg_ms
FROM pg_stat_statements
ORDER BY avg_ms DESC
LIMIT 20;

-- Активные соединения
SELECT count(*) FROM pg_stat_activity WHERE state = 'active';

-- Размер таблиц
SELECT relname, pg_size_pretty(pg_total_relation_size(relid))
FROM pg_stat_user_tables
ORDER BY pg_total_relation_size(relid) DESC;

Типичные причины: отсутствие вакуума на активно обновляемых таблицах; нехватка max_connections; блокировки.

Превышен лимит соединений

Симптом: FATAL: remaining connection slots are reserved for non-replication superuser connections.

Действие: 1. Увеличить max_connections в postgresql.conf (с перезапуском). 2. Настроить пул соединений (PgBouncer) если его ещё нет. 3. Проверить, нет ли утечки соединений в DataHUB: SELECT count(*) FROM pg_stat_activity WHERE application_name = 'DataHUB';

Смена пароля пользователя

Изменение переменной POSTGRES_PASSWORD в .env не меняет пароль в уже инициализированной базе. Пароль меняется только через SQL:

ALTER USER datahub_user PASSWORD 'new_password';

После смены — обновить пароль в конфигурации DataHUB и перезапустить сервис.