Ошибки PostgreSQL: как найти причину по тексту
PostgreSQL объясняет ошибку несколькими английскими словами. Найдите слова из своего сообщения в таблице — для каждой ошибки есть страница с исправлением по шагам.
Содержание 8
Найдите свою ошибку
Найдите в левой колонке слова из своего сообщения — после FATAL, ERROR или после слова failed.
| Слова в сообщении | Что случилось | Что делать |
|---|---|---|
Peer authentication failed for user | При входе через файл-сокет имя пользователя системы не совпало с именем в базе | Разбор |
password authentication failed for user | Пароль не подошёл, не задан или такого пользователя нет | Разбор |
no pg_hba.conf entry for host | В pg_hba.conf нет строки, которая разрешает такое подключение | Разбор |
Connection refused | База не запущена, работает на другом порту или не принимает подключения по этому адресу | Разбор |
on socket … No such file or directory | База не установлена, не запущена или работает на другом порту | Разбор |
role … does not exist | В базе нет пользователя с таким именем | Разбор |
is not permitted to log in | Пользователь есть, но вход ему запрещён | Разбор |
database … does not exist | Базы с таким именем нет | Разбор |
permission denied for database | Пользователю запрещено подключаться к базе | Разбор |
permission denied for schema public | С PostgreSQL 15 таблицы в схеме public создаёт только владелец базы | Разбор |
permission denied for table | У пользователя нет прав на таблицу | Разбор |
must be owner of table | Изменить таблицу может только её владелец | Разбор |
sorry, too many clients already или remaining connection slots are reserved | Все места для подключений заняты | Разбор |
too many connections for role | У пользователя свой предел подключений | Разбор |
Как читать сообщение
psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: role "anna" does not exist- До слова
failed:— куда подключался psql.on socket— через файл-сокет на этом же сервере,server at "127.0.0.1", port 5432— по адресу и порту. FATAL:— ответ самой базы: подключение до неё дошло, но она его закрыла. Причина — в словах после FATAL.- Если слова FATAL нет, а есть
Connection refused,No such file or directoryилиConnection timed out— до базы подключение не дошло. ERROR:— подключение открыто, но не выполнилась одна команда: например, не хватило прав.
Сайт показывает ту же ошибку своими словами или пишет её в свой журнал. Подробности, которые база не сообщает программе, — в журнале базы.
Как войти в базу администратором
Команды вводятся на сервере с базой: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне.
sudo -u postgres psqlКоманда открывает psql — программу для работы с базой — от имени администратора базы postgres. Если система спросит пароль, введите пароль своего пользователя на сервере, а не пароль базы. Символы при вводе не видны — наберите пароль и нажмите Enter. Строка ввода сменится на postgres=#: теперь можно вводить команды для базы. Каждая команда SQL заканчивается точкой с запятой. Выйти — \q.
Пароль базы не нужен: через файл-сокет Ubuntu проверяет вход способом peer, а команда запущена от пользователя системы postgres. Почему без sudo так войти нельзя — разбор ошибки peer.
Работает ли PostgreSQL
pg_lsclustersКоманда покажет базы PostgreSQL на сервере — в PostgreSQL их называют кластерами. В строке каждого кластера есть его состояние: online — работает, down — остановлен. Если кластер в состоянии down, запустите его. В Ubuntu кластер, созданный при установке, называется main, 16 — номер версии:
sudo pg_ctlcluster 16 main startЕсли кластер не запускается, причина — в журнале.
Где журнал
sudo tail -n 30 /var/log/postgresql/postgresql-16-main.logКоманда покажет последние 30 строк журнала кластера main. Если вход не проходит из-за пароля, точная причина записана только здесь. В примерах — PostgreSQL 16 из Ubuntu 24.04. В Ubuntu 26.04 ставится PostgreSQL 18: в путях и командах вместо 16 подставьте 18.
Если база в облаке провайдера
В облачной базе команды sudo нет: пользователей, базы и пароли создают в панели провайдера. Адрес, порт, имя базы и пользователя берите там же. Доступ к облачной базе с других адресов настраивается в панели провайдера или через поддержку.
Тексты ошибок сверены с исходным кодом PostgreSQL 16 — эта версия ставится из пакетов Ubuntu 24.04. В других версиях строки могут немного отличаться.
Источники
- PostgreSQL 16: Error Reporting and Logging — уровни сообщений: ERROR прерывает команду, FATAL — подключение.
- PostgreSQL 16: Problems with Client Authentication — тексты ошибок входа; если имя базы не указано, берётся имя пользователя; подробности — в журнале сервера.
- PostgreSQL 16: Starting the Database Server — раздел Client Connection Problems: Connection refused, нет файла сокета, Connection timed out.
- Документация Ubuntu Server: Install PostgreSQL — peer для подключений через сокет, scram-sha-256 для сетевых, настройки в /etc/postgresql/.
- Справка pg_lsclusters для Ubuntu 24.04 — список кластеров и их состояние: online или down.
- Справка pg_ctlcluster для Ubuntu 24.04 — запуск, остановка, перезапуск и reload кластера, журнал в /var/log/postgresql/.
- Исходный код PostgreSQL 16: auth.c — тексты Peer authentication failed, password authentication failed и no pg_hba.conf entry.
- Исходный код PostgreSQL 16: miscinit.c — тексты role does not exist, is not permitted to log in и too many connections for role.
- Исходный код PostgreSQL 16: postinit.c — тексты remaining connection slots are reserved и too many connections for database.
- Исходный код PostgreSQL 16: aclchk.c — тексты permission denied for schema, table и sequence, must be owner of table.
- Исходный код PostgreSQL 16: proc.c — текст sorry, too many clients already.
- Исходный код PostgreSQL 16: fe-connect.c — начало сообщения psql: socket или server at, и подсказки Is the server running.
Сверено 14 октября 2026 года.
Что почитать дальше
- Как установить PostgreSQL на Ubuntuустановка, пользователь и база для сайта.
- Порт 5432подключиться к базе со своего компьютера через SSH-туннель.
- Сервер для базы данныхкак не открыть базу всему интернету.
- Ошибки MySQL и MariaDBесли сайт работает с MySQL.