Почему DBeaver и pgAdmin не видят базу данных PostgreSQL после её создания

    Ситуация, когда команда CREATE DATABASE выполняется успешно, но при попытке подключиться через DBeaver или pgAdmin появляется ошибка «база данных не существует», знакома многим разработчикам. Особенно часто это происходит после перезагрузки компьютера или сервера. В этой статье разберём основные причины и способы решения.

    Основные причины проблемы

    Наиболее вероятные сценарии, когда база данных создана, но не видна в клиентах:

    • Несоответствие схемы поиска: клиент подключается к другой схеме или использует неверное имя базы.
    • Проблемы с кешированием метаданных: после перезагрузки кеш pgAdmin или DBeaver мог устареть.
    • Ошибки в настройках подключения: неверный порт, хост или параметры аутентификации.
    • Конфликт кодировок и локалей: если база создана с нестандартной кодировкой, клиент может её не распознать.

    Как проверить, что база действительно существует

    Прежде всего убедитесь, что база данных создана на том же сервере, к которому вы подключаетесь. Выполните в командной строке (psql):

    \l

    Эта команда покажет список всех баз данных на сервере PostgreSQL. Если вашей базы там нет - значит, она была создана в другой инстанции или удалена.

    Почему после перезагрузки база может исчезнуть

    Если база была создана в оперативной памяти (например, в тестовом окружении без сохранения на диск) или в контейнере Docker без постоянного хранилища, после перезагрузки все данные теряются. Проверьте настройки data_directory и убедитесь, что PostgreSQL использует постоянное хранилище.

    Решение: обновление кеша и переподключение

    Чаще всего проблема решается простым обновлением списка баз в клиенте:

    • В DBeaver: кликните правой кнопкой по соединению → Refresh (или нажмите F5).
    • В pgAdmin: нажмите кнопку обновления (Refresh) в левой панели.

    Если это не помогло, создайте новое подключение, явно указав имя базы, порт (по умолчанию 5432) и правильного пользователя.

    Проверка прав доступа и ролей

    Убедитесь, что пользователь, от имени которого вы подключаетесь, имеет права CONNECT на созданную базу. Выполните от суперпользователя:

    GRANT CONNECT ON DATABASE your_db_name TO your_user;

    Также проверьте, не установлен ли параметр datistemplate в true - такие базы скрыты от обычных клиентов.

    Дополнительные советы

    • Используйте полные имена баз без лишних пробелов и кавычек.
    • Проверьте логи PostgreSQL (обычно в /var/log/postgresql/) - там могут быть сообщения об ошибках подключения.
    • Если база создавалась через приложение (например, в коде), убедитесь, что транзакция была зафиксирована (COMMIT).

    Часто задаваемые вопросы