Createuser: не удалось подключиться к базе данных postgres: FATAL: роль «tom» не существует

92

Я пытаюсь настроить Postgres впервые, и мне нужно создать пользователя с разрешениями на чтение и создание баз данных. Однако когда я использую:

createuser username

в моем терминале я получаю следующее сообщение:

createuser: не удалось подключиться к базе данных postgres: FATAL: роль "tom" не существует

Том - моя учетная запись пользователя Ubuntu, в которую я вошел прямо сейчас. Я пытаюсь создать имя пользователя postgres, а затем делаю это, psql -U psql template1чтобы создать базу данных и назначить ей владельца для своего приложения Rails.

Том Максвелл
источник
Вы действительно пытаетесь создать пользователя postgres? Или просто пользователь вашего приложения Rails? Обычно пользователь postgres уже существует, и проблема заключается только в подключении к нему, чтобы сделать то, что вам нужно.
ostergaard

Ответы:

132

Вы упомянули 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 и т. Д.)

Крэйг Рингер
источник
Хорошо, после создания owning_user, как вам связаться с этим пользователем? Я хочу подключить пользователя по умолчанию, которого я использую, sudo -u postgres psql postgres. так же как подключить owning_user?
Джони
2
Три варианта. (a) Установите пароль для этого пользователя и отредактируйте, pg_hba.confчтобы использовать md5auth для этого пользователя (см. руководство); (b) Создайте пользователя ОС с тем же именем и продолжайте использовать peerauth; или (c) более продвинутый, создайте pg_ident.confсопоставление, чтобы позволить пользователю вашей ОС войти в систему как новый пользователь.
Крейг Рингер,
66

См. Git gist с инструкциями здесь

Запустите это:

 sudo -u postgres psql

ИЛИ

psql -U postgres

в вашем терминале, чтобы попасть в postgres

NB: если вы работаете на Mac и обе команды выше не удалось, перейдите к разделу о Mac ниже.

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):

Недавно я столкнулся с аналогичной ошибкой на своем Mac:

psql: FATAL: role "postgres" does not exist

Это произошло потому, что моя установка была настроена с суперпользователем базы данных, имя роли которого совпадает с вашим (коротким) именем для входа.

Но некоторые сценарии Linux предполагают, что суперпользователь имеет традиционное имя роли postgres

Как я решил это?

Если вы установили с homebrewзапуском:

/usr/local/opt/postgres/bin/createuser -s postgres

Если вы используете конкретную версию postgres, скажите, 10.5затем запустите:

/usr/local/Cellar/postgresql/10.5/bin/createuser -s postgres

ИЛИ:

/usr/local/Cellar/postgresql/10.5/bin/createuser -s new_username

ИЛИ:

/usr/local/opt/postgresql@11/bin/createuser -s postgres

Если вы установили postgres.appдля Mac, запустите:

/Applications/Postgres.app/Contents/Versions/10.5/bin/createuser -s postgres

PS: замените 10.5 своей версией PostgreSQL

user3402754
источник
Это сработало, чтобы попасть в postgres:psql -U postgres
leontalbot
29
sudo -u postgres createuser -s tom 

это должно помочь вам, поскольку это произойдет, если администратор не создал для вас учетную запись пользователя PostgreSQL. Также может быть, что вам было назначено имя пользователя PostgreSQL, которое отличается от имени пользователя вашей операционной системы, в этом случае вам нужно использовать переключатель -U.

Танмай
источник
7

1- Войти как пользователь PostgreSQL по умолчанию (postgres)

sudo -u postgres -i

2- Как пользователь postgres. Добавьте нового пользователя базы данных с помощью createuserкоманды

[postgres]$ createuser --interactive

3-выход

[postgres]$ exit
Саман Мохамади
источник
5

Ваша ошибка опубликована в официальной документации. Вы можете прочитать эту статью .

Я скопировал для вас причину (и добавил гиперссылки на URL-адреса) из этой статьи:

Это произойдет, если администратор не создал для вас учетную запись пользователя PostgreSQL. (Учетные записи пользователей PostgreSQL отличаются от учетных записей пользователей операционной системы.) Если вы являетесь администратором, см. Главу 20 для получения помощи по созданию учетных записей. Вам нужно будет стать пользователем операционной системы, под которой был установлен PostgreSQL (обычно postgres), чтобы создать первую учетную запись пользователя. Также может быть, что вам было назначено имя пользователя PostgreSQL, которое отличается от имени пользователя вашей операционной системы; в этом случае вам нужно использовать переключатель -U или установить переменную среды PGUSER, чтобы указать ваше имя пользователя PostgreSQL

Для ваших целей вы можете:

1) Создайте учетную запись пользователя PostgreSQL:

sudo -u postgres createuser tom -d -P

( -Pвозможность установить пароль; -dопция, позволяющая создавать базу данных для вашего имени пользователя 'tom'. Обратите внимание, что 'tom' - это имя пользователя вашей операционной системы. Таким образом, вы можете выполнять команды PostgreSQL без sudoing.)

2) Теперь у вас должна быть возможность выполнять createdbи другие команды PostgreSQL.

Рокки Инд
источник
1

У меня была такая же проблема, я просто делаю это

sudo su - postgres

createuser odoo -U postgres -dRSP #P для пароля ( odoo или имя пользователя, которому вы хотите предоставить доступ postgres)

Сагар Т
источник
0

Если вы не хотите менять метод аутентификации (идентификатор) и путаться с pg_hba.conf, используйте это:

Сначала войдите как пользователь по умолчанию

 sudo su - posgres

затем войдите в psql и создайте пользователя с тем же именем, что и тот, в который вы вошли

postgres=# CREATE USER userOS WITH PASSWORD 'garbage' CREATEDB;

вы можете подтвердить своего пользователя с соответствующими ролями с помощью

postgres=#  \du

После этого вы можете создать свою базу данных и проверить ее с помощью

psql -d dbName
\l
\q
Эдуардо Эрнандес
источник
-4

Вам нужно сначала запустить initdb. Он создаст кластер базы данных и начальную настройку

См. Раздел Как настроить postgresql в первый раз? и http://www.postgresql.org/docs/8.4/static/app-initdb.html

Жан-Мари
источник
5
Это совершенно неверно. Если бы пользователь не запустился, initdbу него не было бы запущенного сервера базы данных и приема подключений для выдачи сообщения об ошибке. Удалите, пожалуйста, этот вводящий в заблуждение ответ. (Кстати, в будущем, пожалуйста, сделайте ссылку на / docs / current / static /, чтобы избежать накопления устаревших ссылок)
Крейг Рингер,