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

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

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

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

Любая помощь?

Ответ 1

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

Ответ 2

Смотрите 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):

Недавно я столкнулся с похожей ошибкой на моем 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

Ответ 3

sudo -u postgres createuser -s tom 

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

Ответ 4

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

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

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

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

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

sudo -u postgres createuser tom -d -P

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

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

Ответ 5

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

sudo -u postgres -i

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

[postgres]$ createuser --interactive

3-выхода

[postgres]$ exit

Ответ 6

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

sudo su - postgres

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

Ответ 7

В Windows используйте:

C:\PostgreSQL\pg10\bin>createuser -U postgres --pwprompt <USER>

Добавьте --superuser или --createdb в зависимости от ситуации.

См. Https://www.postgresql.org/docs/current/static/app-createuser.html для получения дополнительной информации.