PostgreSQL: FATAL: role does not exist
В базе нет пользователя с таким именем. Если имя не указано, psql берёт имя пользователя системы, под которым вы вошли на сервер, а пользователи базы и системы — разные списки. Укажите пользователя базы ключом -U или создайте его.
Содержание 10
Как выглядит ошибка
psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: role "anna" does not existrole "anna"— имя пользователя базы, с которым psql пытался войти. В PostgreSQL пользователей называют ролями.does not exist— пользователя с таким именем в базе нет.
Пользователи базы не совпадают с пользователями системы на сервере. Если имя не указано ключом -U, psql берёт имя пользователя системы: вошли на сервер как anna — psql попробует войти в базу тоже как anna.
Шаг 1. Укажите пользователя базы
Если у сайта уже есть пользователь базы, например ivan, укажите его ключом -U, а имя базы — последним словом:
psql -h 127.0.0.1 -U ivan shoppsql спросит пароль — введите пароль пользователя базы. Зачем -h 127.0.0.1 — в разборе ошибки peer.
Шаг 2. Посмотрите, какие пользователи есть в базе
Команды вводятся на сервере с базой: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне. Войдите в базу администратором:
sudo -u postgres psqlКоманда открывает psql — программу для работы с базой — от имени администратора базы postgres. Если система спросит пароль, введите пароль своего пользователя на сервере, а не пароль базы. Символы при вводе не видны — наберите пароль и нажмите Enter. Строка ввода сменится на postgres=#: теперь можно вводить команды для базы. Каждая команда SQL заканчивается точкой с запятой. Выйти — \q. Затем введите:
\duКоманда покажет пользователей базы. Если нужного имени в списке нет — создайте пользователя.
Имена без кавычек база приводит к строчным буквам: команда CREATE USER Anna создаст пользователя anna. Если в списке имя с заглавными буквами, в ключе -U пишите его точно так же, а в командах SQL берите в двойные кавычки: "Anna".
Шаг 3. Создайте пользователя
В том же окне psql, где строка ввода postgres=#, выполните команду. Вместо anna подставьте имя, вместо новый-пароль — свой пароль:
CREATE USER anna WITH PASSWORD 'новый-пароль';Выйдите командой \q и войдите новым пользователем, указав базу:
psql -h 127.0.0.1 -U anna shopЕсли базы для пользователя ещё нет, создайте её вместе с ним — пользователь и база для сайта.
Чтобы psql входил без ключей
Без ключей psql входит в базу через файл-сокет: имя пользователя и имя базы он берёт из имени пользователя системы. Чтобы так входил пользователь системы anna, создайте в базе пользователя и базу с тем же именем:
CREATE USER anna;
CREATE DATABASE anna OWNER anna;Пароль не нужен: через файл-сокет Ubuntu проверяет вход способом peer — база пускает anna, потому что команда запущена от пользователя системы с тем же именем.
Если роль есть, но войти нельзя
FATAL: role "ivan" is not permitted to log inПользователь в базе есть, но вход ему запрещён. Так бывает, если его создали командой CREATE ROLE: в отличие от CREATE USER, она по умолчанию создаёт роль без права входа. Разрешите вход из sudo -u postgres psql:
ALTER ROLE ivan LOGIN;Если у роли не задан пароль, задайте его командой \password ivan.
Если подключаетесь по адресу
При подключении с ключом -h 127.0.0.1 или с другого сервера база сначала проверяет пароль. Если пользователя нет, psql покажет другую ошибку — password authentication failed for user, а причина Role "anna" does not exist. будет только в журнале базы. Разбор — password authentication failed.
Ошибки рядом
| Что видите | Что делать |
|---|---|
FATAL: Peer authentication failed for user | имя в системе не совпало с именем в базе |
FATAL: database "anna" does not exist | такой базы нет |
FATAL: password authentication failed for user | не подошёл пароль или пользователя нет |
Источники
- PostgreSQL 16: Creating a Database — ошибка role does not exist: пользователи базы отделены от пользователей системы.
- PostgreSQL 16: Database Connection Control Functions — параметр user: если имя не указано, берётся имя пользователя системы.
- PostgreSQL 16: Database Roles — в новой системе одна роль с правом входа, её имя совпадает с пользователем системы, запустившим initdb: postgres.
- PostgreSQL 16: CREATE ROLE — по умолчанию NOLOGIN, кроме CREATE USER; CONNECTION LIMIT, -1 — без ограничения.
- PostgreSQL 16: ALTER ROLE — LOGIN, CONNECTION LIMIT и VALID UNTIL 'infinity': пароль без срока.
- PostgreSQL 16: Lexical Structure — имена без кавычек приводятся к строчным буквам.
- PostgreSQL 16: psql — команды \du, \l, \c и \password.
- Исходный код PostgreSQL 16: miscinit.c — тексты role does not exist, is not permitted to log in и too many connections for role.
- Исходный код PostgreSQL 16: crypt.c — пояснения для журнала: роли нет, пароль не задан, не совпал или истёк.
- Документация Ubuntu Server: Install PostgreSQL — peer для подключений через сокет, scram-sha-256 для сетевых, настройки в /etc/postgresql/.
Сверено 14 октября 2026 года.
Что почитать дальше
- Ошибки PostgreSQLвсе разборы ошибок базы.
- Как установить PostgreSQL на Ubuntuустановка, пользователь и база для сайта.
- Порт 5432подключиться к базе со своего компьютера.