Createuser: не удалось подключиться к базе данных postgres: FATAL: роль "tom" не существует
Я пытаюсь настроить Postgres в первый раз, и мне нужно создать пользователя с правами на чтение и создание баз данных. Однако, когда я использую "имя пользователя createuser" в моем терминале, я получаю следующее сообщение:
createuser: не удалось подключиться к базе данных postgres: FATAL: роль "tom" не существует
Tom - моя учетная запись пользователя Ubuntu, в которую я вошел прямо сейчас. Я пытаюсь создать имя пользователя "postgres", а затем выполнить "psql -U psql template1", чтобы я мог создать базу данных и назначить ей владельца для моего приложения на Rails.
Любая помощь?
10 ответов
Вы упомянули Ubuntu, поэтому я предполагаю, что вы установили пакеты PostgreSQL из Ubuntu через apt.
Если так, то postgres
Учетная запись пользователя PostgreSQL уже существует и настроена для доступа через peer
аутентификация для сокетов Unix в pg_hba.conf
, Вы добираетесь до этого, выполняя команды как postgres
пользователь unix, например:
sudo -u postgres createuser owning_user
sudo -u postgres createdb -O owning_user dbname
Это все в документации по Ubuntu PostgreSQL, которая является первым хитом Google для "Ubuntu PostgreSQL" и освещена в многочисленных вопросах переполнения стека.
(Вы затруднили ответ на этот вопрос, опуская детали, такие как ОС и версия, на которой вы работаете, как вы установили PostgreSQL и т. Д.)
Смотрите git gist с инструкциями здесь
Запустите это:
sudo -u postgres psql
ИЛИ ЖЕ
psql -U postgres
в свой терминал, чтобы попасть в postgres
postgres=#
Бежать
CREATE USER new_username;
Примечание: замените new_username на пользователя, которого вы хотите создать, в вашем случае это будет Tom.
postgres=# CREATE USER new_username;
CREATE ROLE
Поскольку вы хотите, чтобы этот пользователь мог создавать БД, вам нужно изменить роль на суперпользователя
postgres=# ALTER USER new_username SUPERUSER CREATEDB;
ALTER ROLE
Чтобы подтвердить, все было успешно,
postgres=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------+-----------
new_username | Superuser, Create DB | {}
postgres | Superuser, Create role, Create DB, Replication | {}
root | Superuser, Create role, Create DB | {}
postgres=#
Обновление / Модификация:
Недавно я столкнулся с похожей ошибкой на моем Mac:
psql: FATAL: role "postgres" does not exist
Это произошло потому, что моя установка была настроена с суперпользователем базы данных, чья роль совпадает с вашим логином (коротким).
Но некоторые сценарии Linux предполагают, что суперпользователь имеет традиционное имя роли postgres
Как я решил это?
Если вы установили с homebrew
бежать:
/usr/local/Cellar/postgresql/10.5/bin/createuser -s postgres
ИЛИ ЖЕ:
/usr/local/Cellar/postgresql/10.5/bin/createuser -s new_username
Если вы установили с postgres.app
для Mac запустить:
/Applications/Postgres.app/Contents/Versions/10.5/bin/createuser -s postgres
PS: замените 10.5 на вашу версию PostgreSQL
sudo -u postgres createuser -s tom
это должно помочь вам, так как это произойдет, если администратор не создал для вас учетную запись пользователя PostgreSQL. Возможно также, что вам было присвоено имя пользователя PostgreSQL, отличное от имени пользователя вашей операционной системы, в этом случае вам нужно использовать ключ -U.
1- Войдите как пользователь PostgreSQL по умолчанию (postgres)
sudo -u postgres -i
2- Как пользователь postgres. Добавьте нового пользователя базы данных, используя createuser
команда
[postgres]$ createuser --interactive
3-выход
[postgres]$ exit
Ваша ошибка размещена в официальной документации. Вы можете прочитать эту статью.
Я скопировал причину для вас (и гиперссылки на URL) из этой статьи:
Это произойдет, если администратор не создал для вас учетную запись пользователя PostgreSQL. (Учетные записи пользователей PostgreSQL отличаются от учетных записей пользователей операционной системы.) Если вы являетесь администратором, обратитесь к Главе 20 за помощью в создании учетных записей. Вам нужно стать пользователем операционной системы, под которой был установлен PostgreSQL (обычно postgres), чтобы создать первую учетную запись пользователя. Возможно также, что вам было присвоено имя пользователя PostgreSQL, отличающееся от имени пользователя вашей операционной системы; в этом случае вам нужно использовать ключ -U или установить переменную окружения PGUSER, чтобы указать свое имя пользователя в PostgreSQL
Для ваших целей вы можете сделать:
1) Создайте учетную запись пользователя PostgreSQL:
sudo -u postgres createuser tom -d -P
(-P
возможность установить пароль; -d
опция для разрешения создания базы данных для вашего имени пользователя "Том". Обратите внимание, что tom - это имя пользователя вашей операционной системы. Таким образом, вы можете выполнять команды PostgreSQL без sudo
Инж.)
2) Теперь вы должны быть в состоянии выполнить createdb
и другие команды PostgreSQL.
Если вы не хотите менять метод аутентификации (идентификатор) и путаться с pg_hba.conf, используйте это:
Сначала войдите как пользователь по умолчанию
sudo su - posgres
затем войдите в psql и создайте пользователя с тем же именем, что и тот, в который вы вошли
postgres=# CREATE USER userOS WITH PASSWORD 'garbage' CREATEDB;
вы можете подтвердить своего пользователя с соответствующими ролями с помощью
postgres=# \du
После этого вы можете создать свою базу данных и проверить ее с помощью
psql -d dbName
\l
\q
Для Linux вы можете активировать SUPERUSER, чтобы иметь возможность создавать такие базы данных:
Перейти к терминалу/оболочке
Войдите внутрь postgres, используя
sudo -u postgres -i
Теперь ваш терминал будет выглядеть как « [email protected] :~$»
- Войдите в терминал postgres, используя
psql
Теперь ваш терминал будет выглядеть как «postgres=#»
- Входить
alter user [postgres_user_name] createdb;
Теперь у пользователя будет доступ для создания db.
Выйдите из psql, используя '\q'
Выйдите из postgres, используя
exit
Надеюсь, это поможет вам.
В Windows используйте:
C:\PostgreSQL\pg10\bin>createuser -U postgres --pwprompt <USER>
добавлять --superuser
или же --createdb
по мере необходимости.
См. https://www.postgresql.org/docs/current/static/app-createuser.html для получения дополнительной информации.
У меня была такая же проблема, я просто делаю это
sudo su - postgres
createuser odoo -U postgres -dRSP #P для пароля (odoo или имя пользователя, которое вы хотите получить для доступа postgres)
Вам нужно сначала запустить initdb. Это создаст кластер базы данных и начальную настройку
См. Как настроить postgresql в первый раз? и http://www.postgresql.org/docs/8.4/static/app-initdb.html